Java 使用PoolingHttpClientConnectionManager在HttpClient上禁用SSL
我正在尝试在我的Java 使用PoolingHttpClientConnectionManager在HttpClient上禁用SSL,java,apache-httpclient-4.x,Java,Apache Httpclient 4.x,我正在尝试在我的CloseableHttpAsyncClient上禁用SSL。下面是我使用的代码: private synchronized CloseableHttpAsyncClient getCloseableClient() throws Exception { if (closeableHttpAsyncClient == null) { logger.info("New Async Client created "); closeableHtt
CloseableHttpAsyncClient
上禁用SSL。下面是我使用的代码:
private synchronized CloseableHttpAsyncClient getCloseableClient() throws Exception {
if (closeableHttpAsyncClient == null) {
logger.info("New Async Client created ");
closeableHttpAsyncClient = HttpAsyncClientBuilder.create()
.setDefaultRequestConfig(createConnConfig())
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
}).build())
// .setKeepAliveStrategy(kepAliveStrategy) TODO
.setConnectionManager(createPoolingConnManager()).build();
closeableHttpAsyncClient.start();
}
return closeableHttpAsyncClient;
}
但是,当我运行上述操作时,我仍然得到:
javax.net.ssl.SSLHandshakeException: General SSLEngine problem
这里可能有什么问题,我假设我也必须修改我的
池gnhttpclientconnectionmanager
。然而,我不知道如何做到这一点。任何指针都会有帮助代码的问题是#setConnectionManager
调用覆盖#setSSLContext
使SSLContext
实例无效
让HttpAsyncClientBuilder
在内部创建连接管理器
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(null, (x509Certificates, s) -> true)
.build();
HttpAsyncClientBuilder.create()
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setSSLContext(sslContext)
.build();
或者将SSLContext
实例作为构造函数参数传递给PoolgnHttpClientConnectionManager
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(null, (x509Certificates, s) -> true)
.build();
Registry<SchemeIOSessionStrategy> registry = RegistryBuilder.<SchemeIOSessionStrategy>create()
.register("http", NoopIOSessionStrategy.INSTANCE)
.register("https", new SSLIOSessionStrategy(sslContext, NoopHostnameVerifier.INSTANCE))
.build();
DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
HttpAsyncClientBuilder.create()
.setConnectionManager(new PoolingNHttpClientConnectionManager(ioReactor, registry))
.build();
SSLContext SSLContext=new SSLContextBuilder()
.loadTrustMaterial(null,(x509Certificates,s)->true)
.build();
Registry Registry=RegistryBuilder.create()
.register(“http”,NoopIOSessionStrategy.INSTANCE)
.register(“https”,新的SSLIOSessionStrategy(sslContext,NoopHostnameVerifier.INSTANCE))
.build();
DefaultConnectionReactor ioReactor=新的DefaultConnectionReactor();
HttpAsyncClientBuilder.create()
.setConnectionManager(新池gnHttpClientConnectionManager(ioReactor,注册表))
.build();
请提供更多错误堆栈跟踪。您提供的上下文没有多大帮助。恐怕这是我仅有的堆栈跟踪。然而,我已经解决了这个问题,并将发布一个简短的解决方案您所说的“禁用SSL”到底是什么意思?禁用主机名验证?禁用SSL信任验证?完全不允许https协议模式?https协议模式例如,我想信任每一个SSL证书。与以前的版本不同,PoolgnHttpClientConnectionManager
的构造函数接受一个注册表。我已经用类似的方法解决了这个问题,不过谢谢你的回答:)