Опираясь на ответ Александр Чжен и для HttpClient 4.3 я сначала создаю контекст, который доверяет всем:
SSLContextBuilder sslctxb = new SSLContextBuilder();
sslctxb.loadTrustMaterial(KeyStore.getInstance(KeyStore.getDefaultType()),
new TrustSelfSignedStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain,
String authType)
throws CertificateException {
return true;
}
});
SSLContext sslctx = sslctxb.build();
Затем клиентский компоновщик:
HttpClientBuilder hcb = HttpClients.custom();
и я только устанавливаю контекст.Я не использую setSSLSocketFactory , потому что это будет мешать setHostnameVerifier ниже:
hcb.setSslcontext(sslctx);
Наконец, я установил верификатор имени хоста, который проверяет все:
hcb.setHostnameVerifier(new X509HostnameVerifier() {
@Override
public void verify(String host, SSLSocket ssl)
throws IOException {
}
@Override
public void verify(String host, X509Certificate cert)
throws SSLException {
}
@Override
public void verify(String host, String[] cns, String[] subjectAlts)
throws SSLException {
}
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
Наконец, соберите клиент:
HttpClient c = hcb.build();