|
32 | 32 | import org.apache.http.client.config.RequestConfig;
|
33 | 33 | import org.apache.http.client.methods.CloseableHttpResponse;
|
34 | 34 | import org.apache.http.client.protocol.HttpClientContext;
|
35 |
| -import org.apache.http.conn.ssl.AllowAllHostnameVerifier; |
| 35 | +import org.apache.http.config.Registry; |
| 36 | +import org.apache.http.config.RegistryBuilder; |
| 37 | +import org.apache.http.conn.HttpClientConnectionManager; |
| 38 | +import org.apache.http.conn.socket.ConnectionSocketFactory; |
| 39 | +import org.apache.http.conn.socket.PlainConnectionSocketFactory; |
| 40 | +import org.apache.http.conn.ssl.NoopHostnameVerifier; |
36 | 41 | import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
37 |
| -import org.apache.http.conn.ssl.SSLContexts; |
38 | 42 | import org.apache.http.conn.ssl.TrustStrategy;
|
39 | 43 | import org.apache.http.entity.ContentType;
|
40 | 44 | import org.apache.http.impl.client.CloseableHttpClient;
|
41 | 45 | import org.apache.http.impl.client.HttpClients;
|
42 | 46 | import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
43 | 47 | import org.apache.http.message.BasicHttpEntityEnclosingRequest;
|
44 | 48 | import org.apache.http.message.BasicHttpRequest;
|
| 49 | +import org.apache.http.ssl.SSLContextBuilder; |
45 | 50 | import org.slf4j.Logger;
|
46 | 51 | import org.slf4j.LoggerFactory;
|
47 | 52 |
|
@@ -108,37 +113,57 @@ public NetworkClientImpl(final ConnectionDetails connectionDetails, final Closea
|
108 | 113 |
|
109 | 114 |
|
110 | 115 | private static CloseableHttpClient createDefaultClient(final ConnectionDetails connectionDetails) {
|
111 |
| - final PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); |
112 |
| - connectionManager.setDefaultMaxPerRoute(MAX_CONNECTION_PER_ROUTE); |
113 |
| - connectionManager.setMaxTotal(MAX_CONNECTION_TOTAL); |
114 | 116 |
|
115 | 117 | if (connectionDetails.isHttps() && !connectionDetails.isCertificateVerification()) {
|
116 | 118 | try {
|
117 |
| - |
118 |
| - final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() { |
119 |
| - @Override |
120 |
| - public boolean isTrusted(final X509Certificate[] chain, final String authType) throws CertificateException { |
121 |
| - return true; |
122 |
| - } |
123 |
| - }).useTLS().build(); |
124 |
| - |
125 |
| - final SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier()); |
126 |
| - return HttpClients.custom() |
127 |
| - .setConnectionManager(connectionManager) |
128 |
| - .setSSLSocketFactory( |
129 |
| - sslsf).build(); |
| 119 | + return createInsecureSslHttpClient(); |
130 | 120 |
|
131 | 121 | } catch (final NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
|
132 | 122 | throw new SSLSetupException(e);
|
133 | 123 | }
|
134 | 124 | }
|
135 | 125 | else {
|
136 | 126 | return HttpClients.custom()
|
137 |
| - .setConnectionManager(connectionManager) |
| 127 | + .setConnectionManager(createConnectionManager(null)) |
138 | 128 | .build();
|
139 | 129 | }
|
140 | 130 | }
|
141 | 131 |
|
| 132 | + private static CloseableHttpClient createInsecureSslHttpClient() throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException { |
| 133 | + final SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { |
| 134 | + @Override |
| 135 | + public boolean isTrusted(final X509Certificate[] chain, final String authType) throws CertificateException { |
| 136 | + return true; |
| 137 | + } |
| 138 | + }).build(); |
| 139 | + |
| 140 | + final SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); |
| 141 | + final Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() |
| 142 | + .register("http", PlainConnectionSocketFactory.getSocketFactory()) |
| 143 | + .register("https", sslsf) |
| 144 | + .build(); |
| 145 | + |
| 146 | + final HttpClientConnectionManager connectionManager = createConnectionManager(socketFactoryRegistry); |
| 147 | + |
| 148 | + return HttpClients.custom() |
| 149 | + .setConnectionManager(connectionManager) |
| 150 | + .setSSLSocketFactory( |
| 151 | + sslsf).build(); |
| 152 | + } |
| 153 | + |
| 154 | + private static HttpClientConnectionManager createConnectionManager(final Registry<ConnectionSocketFactory> socketFactoryRegistry) { |
| 155 | + final PoolingHttpClientConnectionManager connectionManager; |
| 156 | + if (socketFactoryRegistry != null) { |
| 157 | + connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); |
| 158 | + } else { |
| 159 | + connectionManager = new PoolingHttpClientConnectionManager(); |
| 160 | + } |
| 161 | + |
| 162 | + connectionManager.setDefaultMaxPerRoute(MAX_CONNECTION_PER_ROUTE); |
| 163 | + connectionManager.setMaxTotal(MAX_CONNECTION_TOTAL); |
| 164 | + return connectionManager; |
| 165 | + } |
| 166 | + |
142 | 167 | private static HttpHost buildHost(final ConnectionDetails connectionDetails) throws MalformedURLException {
|
143 | 168 | final URI proxyUri = connectionDetails.getProxy();
|
144 | 169 | if (proxyUri != null) {
|
|
0 commit comments