Skip to content

Commit a59e060

Browse files
author
shabtaisharon
committed
Merge pull request #169 from rpmoore/insecure_ssl_fix
fixed the insecure httpclient builder to create the connection manage…
2 parents 3f27a41 + c5af202 commit a59e060

File tree

3 files changed

+46
-20
lines changed

3 files changed

+46
-20
lines changed

ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/PutJobManagement_Test.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ private void waitForObjectToBeInCache(final int testTimeOutSeconds, final UUID j
8787
}
8888
}
8989

90+
@SuppressWarnings("deprecation")
9091
@Test
9192
public void nakedS3Put() throws IOException, SignatureException, XmlProcessingException, URISyntaxException {
9293
try {

ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3ClientBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public Ds3ClientBuilder withCertificateVerification(final boolean certificateVer
136136
*/
137137
public Ds3ClientBuilder withProxy(final String proxy) throws IllegalArgumentException {
138138
if (proxy == null) {
139-
LOG.warn("Proxy was null");
139+
LOG.info("Proxy was null");
140140
return this;
141141
}
142142
try {

ds3-sdk/src/main/java/com/spectralogic/ds3client/NetworkClientImpl.java

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,21 @@
3232
import org.apache.http.client.config.RequestConfig;
3333
import org.apache.http.client.methods.CloseableHttpResponse;
3434
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;
3641
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
37-
import org.apache.http.conn.ssl.SSLContexts;
3842
import org.apache.http.conn.ssl.TrustStrategy;
3943
import org.apache.http.entity.ContentType;
4044
import org.apache.http.impl.client.CloseableHttpClient;
4145
import org.apache.http.impl.client.HttpClients;
4246
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
4347
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
4448
import org.apache.http.message.BasicHttpRequest;
49+
import org.apache.http.ssl.SSLContextBuilder;
4550
import org.slf4j.Logger;
4651
import org.slf4j.LoggerFactory;
4752

@@ -108,37 +113,57 @@ public NetworkClientImpl(final ConnectionDetails connectionDetails, final Closea
108113

109114

110115
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);
114116

115117
if (connectionDetails.isHttps() && !connectionDetails.isCertificateVerification()) {
116118
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();
130120

131121
} catch (final NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
132122
throw new SSLSetupException(e);
133123
}
134124
}
135125
else {
136126
return HttpClients.custom()
137-
.setConnectionManager(connectionManager)
127+
.setConnectionManager(createConnectionManager(null))
138128
.build();
139129
}
140130
}
141131

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+
142167
private static HttpHost buildHost(final ConnectionDetails connectionDetails) throws MalformedURLException {
143168
final URI proxyUri = connectionDetails.getProxy();
144169
if (proxyUri != null) {

0 commit comments

Comments
 (0)