gpt4 book ai didi

java - 信任不信任的证书并跳过主机名验证

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:49 25 4
gpt4 key购买 nike

我有一个运行 https 网络服务器的服务器。当我用我的浏览器输入它时,我得到域不匹配的错误(因为我使用服务器的 IP)并且证书不受信任。现在我需要使用 apache httpclient 4.2.1 向该服务器发送 GET 请求。我在网上找到了一段代码,对我有帮助:

    httpClient = new DefaultHttpClient(a, b);
SSLSocketFactory sslSocketFactory = new SSLSocketFactory(
new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
return true;
}
}, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", 443, sslSocketFactory));

因为我不完全理解这段代码,所以我想问一些问题。

1) 我是否正确理解 SSlSocetFactory 的第一个参数是绕过我的证书问题的“不可信”部分?它基本上只是返回每个证书都是可信的?

2) 可能需要第二个参数,因为我的证书主机名没有匹配 URL?

3)这个SchemeRegistry和Scheme究竟是什么?我正在制作一个带有参数“https”、443 和我之前创建的 SSLSocketFactory 的新方案。我知道这个方案是针对 https 连接的,它使用我在 sslSocketFactory 中定义的规则,但是端口是做什么用的?这是否适用于仅在端口 443 或其他端口上的 https 连接?如果我的端口不同,我应该在那里输入不同的端口吗?

4) 最重要的问题:如果我要使用受信任的证书,那么我怎么能只跳过主机名验证而不更改信任策略?

最佳答案

1) Do i understand correctly that the first parameter of SSlSocetFactory is to bypass the "not trusted" part of my certificate problem? It basically just returns that every certificate is trusted?

是的。这是一个非常糟糕的主意。

2) The second parameter is probably needed because my cerificate hostname does not mach the URL?

是的。这也是一个非常糟糕的主意。

... but whats the port for

这是协议(protocol)的默认端口,即如果您提供 https://host/ URL 而不是 https://host:port/知道端口将是 443。

4) The most important question: if i were to use a trusted certificate then how could i only skip hostname verification and not change the trust strategy?

禁用验证的这一重要部分将是一个非常糟糕的主意。实际上,您将允许使用由受信任的 CA 签署的任何 证书,而不是您自己的证书。由于拥有某个域并为其获取受信任的证书很容易,因此您很容易遭受中间人攻击。

如果真的不可能使用正确的证书(为什么你使用 IP 而不是名称呢?)那么你应该使用证书或公钥锁定来只信任这个证书。参见 OWASP了解更多信息,包括示例代码。

关于java - 信任不信任的证书并跳过主机名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29546834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com