当前,我有以下代码段可以接受任何SSL证书(Apache HTTP客户端4.5.7):
CloseableHttpClient client;
final SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(new TLSSocketConnectionFactory(),
new String[]{"TLSv1.2"}, new String[]{}, new AnyHostnameVerifier(logger));
client = HttpClients
.custom()
.setSSLSocketFactory(sf)
.setSSLHostnameVerifier(new AnyHostnameVerifier(logger))
.setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
}).build())
.build();
return client;
我想创建一个类似的客户端
我该怎么办?
我尝试这样做
据我所知,如果使用默认的KeyStore,它将自动验证由公共机构签署的证书的有效性。
所以我写了这个:
final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
但是方法SSLContextBuilder.loadTrustMaterial
需要第二个参数-信任策略。
这就是我遇到的问题-我不知道如何实施满足上述条件的信任策略(接受由公共机构签署的所有证书,拒绝所有自签署的证书)。我应该完全实现它还是只通过null
?