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
的构造函数接受一个
注册表。我已经用类似的方法解决了这个问题,不过谢谢你的回答:)