0

我已经配置了 CloseableHttpAsyncClient 如下所述

   public CloseableHttpAsyncClient closeableHttpAsyncClient(){
        HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom();
        final PoolingAsyncClientConnectionManager connManager = new PoolingAsyncClientConnectionManager();
        connManager.setMaxTotal(10);
        clientBuilder.setConnectionManager(connManager);

        clientBuilder.setRedirectStrategy(DefaultRedirectStrategy.INSTANCE);
        CloseableHttpAsyncClient closeableHttpAsyncClient = clientBuilder.build();
        return closeableHttpAsyncClient;
}

我想绕过 SSL 验证。我试图检查不同的配置,但没有找到相同的解决方案。

4

1 回答 1

1

可以设置自定义 TLS 上下文并将其与默认 TLS 策略一起使用,如下所述:

https://github.com/apache/httpcomponents-client/blob/5.1.x/httpclient5/src/test/java/org/apache/hc/client5/http/examples/AsyncClientCustomSSL.java

在此特定示例中,连接管理器已配置为信任所有 CN 等于 httpbin.org 的证书以及标准 CA。人们可以选择不同的策略或不加选择地信任所有证书,尽管强烈反对后者。

final SSLContext sslcontext = SSLContexts.custom()
        .loadTrustMaterial(new TrustStrategy() {

            @Override
            public boolean isTrusted(
                    final X509Certificate[] chain,
                    final String authType) throws CertificateException {
                // Trust all certs with CN equal `httpbin.org`
                final X509Certificate cert = chain[0];
                return "CN=httpbin.org".equalsIgnoreCase(cert.getSubjectDN().getName());
            }

        })
        .build();
final TlsStrategy tlsStrategy = ClientTlsStrategyBuilder.create()
        .setSslContext(sslcontext)
        .build();
final PoolingAsyncClientConnectionManager cm = PoolingAsyncClientConnectionManagerBuilder.create()
        .setTlsStrategy(tlsStrategy)
        .build();
于 2022-01-05T13:06:46.947 回答