簡體   English   中英

HttpClient同時設置SSLHostnameVerifier和ConnectionManager

[英]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();

我使用NoopH​​ostnameVerifier是因為我不想驗證SSL,但是在我的ConnectionManager中存在必不可少的邏輯,並且沒有機會忘記ConnectionManager。

問題是,如果我有ConnectionManager和SSLHostnameVerifier(NoopH​​ostnameVerifier),則會收到以下錯誤:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM