2

我使用PoolingHttpClientconnectionManager并且每个请求都需要特定的 sslcontext。默认情况下 CloseableHttpClient 使用管理器的 sslcontext,但我需要来自 .setSSLContext(context) 的 sslcontext。如何解决这个问题?我需要连接池,同时每个请求都需要特定的 sslcontext

CloseableHttpClient client = HttpClients.custom()
                .setConnectionManager(httpPoolManager.getConnectionManager())
                .setSSLSocketFactory(new SSLConnectionSocketFactory(context, NoopHostnameVerifier.INSTANCE))
                .setSSLContext(context)
                .build();
        setExternalRequestId(externalRequestId);
        setHttpClient(client);
4

2 回答 2

0

我不得不挖掘源代码,但发现以下作品,假设您可以构建自己的PoolingHttpClientConnectionManager.

Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                    .register("https", new SSLConnectionSocketFactory(sslContext))
                    .build();

CloseableHttpClient httpClient = HttpClientBuilder.create()
                    // important line -- use registry in constructor
                    .setConnectionManager(new PoolingHttpClientConnectionManager(registry)) // IMPORTANT
                    .build();
于 2019-06-13T19:25:15.363 回答
0

那些日子我正在努力。

您可以使用以下代码构建 HTTPs 客户端:

    SSLContextBuilder builder = new SSLContextBuilder();
    // Truest all request
    try {
    builder.loadTrustMaterial(null, new TrustStrategy() {
        @Override
        public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            return true;
        }
    });
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build(), new String[] {"TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
    Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
            .register(HTTPS, sslsf)
            .build();
    PoolingHttpClientConnectionManager pccm = new PoolingHttpClientConnectionManager(registry);

接着 :

HttpClients.custom()
    .setSSLSocketFactory(sslsf)
    .setConnectionManager(pccm)
    .setConnectionManagerShared(true)
    .build();
于 2018-01-31T09:47:24.980 回答