[英]HttpClient set up SSLHostnameVerifier and ConnectionManager at the same time
Registry<ConnectionSocketFactory> reg =RegistryBuilder<ConnectionSocketFactory>create().register("https", new
SSLConnectionSocketFactory(ctx)).register("http", new PlainConnectionSocketFactory())
.build();
PoolingHttpClientConnectionManager cm = newPoolingHttpClientConnectionManager(reg);
client = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(config)
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.build();
我使用NoopHostnameVerifier是因為我不想驗證SSL,但是在我的ConnectionManager中存在必不可少的邏輯,並且沒有機會忘記ConnectionManager。
問題是,如果我有ConnectionManager和SSLHostnameVerifier(NoopHostnameVerifier),則會收到以下錯誤:
javax.net.ssl.SSLPeerUnverifiedException:對等方未通過身份驗證
是什么導致此問題?
這對我有用。 我在這里找到的。
PoolingHttpClientConnectionManager cm;
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();
clientBuilder.setSslcontext(sslContext);
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier());
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", sslSocketFactory)
.build();
cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
cm = new PoolingHttpClientConnectionManager();
}
您需要使用NoopHostnameVerifier
的單例
因此,將new NoopHostnameVerifier()
更改為NoopHostnameVerifier.INSTANCE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.