如何使用Apache HTTP客户端API获取远程服务器不可信SSL证书
问题描述:
我有一个远程服务器,它可能使用有效的SSL证书(使用自签名SSL证书)运行,也可能不运行。如何使用Apache HTTP客户端API获取远程服务器不可信SSL证书
我们正在连接远程服务器,如果远程服务器使用自签名SSL证书,则可能会失败。所以,如果我们的SSL握手失败,我们希望能够下载/查看远程服务器证书。
如果我使用Apache HTTP客户端,那么我找不到可以让我查看远程服务器证书的方法(您可以使用HttpsURLConnection执行此操作,但我们正在尝试避免使用它)see this example)。
我也看了一下Spring RestTemplate,它没有提供任何选项 - 我在Google上搜索,没有找到任何有关Spring或Apache HTTP Client的内容。
答
这应该会给你几乎完全控制信任验证的过程。
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial((chain, authType) -> {
for (X509Certificate cert: chain) {
System.out.println(cert.getSubjectDN());
}
// Let the standard trust managers decide
// whether or not the cert chain is trusted
return false;
})
.build();
CloseableHttpClient client = HttpClientBuilder.create()
.setSSLContext(sslContext)
.build();