in src/main/java/com/aliyun/oss/common/comm/DefaultServiceClient.java [239:299]
protected HttpClientConnectionManager createHttpClientConnectionManager() {
SSLConnectionSocketFactory sslSocketFactory = null;
try {
List<TrustManager> trustManagerList = new ArrayList<TrustManager>();
X509TrustManager[] trustManagers = config.getX509TrustManagers();
if (null != trustManagers) {
trustManagerList.addAll(Arrays.asList(trustManagers));
}
// get trustManager using default certification from jdk
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);
trustManagerList.addAll(Arrays.asList(tmf.getTrustManagers()));
final List<X509TrustManager> finalTrustManagerList = new ArrayList<X509TrustManager>();
for (TrustManager tm : trustManagerList) {
if (tm instanceof X509TrustManager) {
finalTrustManagerList.add((X509TrustManager) tm);
}
}
CompositeX509TrustManager compositeX509TrustManager = new CompositeX509TrustManager(finalTrustManagerList);
compositeX509TrustManager.setVerifySSL(config.isVerifySSLEnable());
KeyManager[] keyManagers = null;
if (config.getKeyManagers() != null) {
keyManagers = config.getKeyManagers();
}
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, new TrustManager[]{compositeX509TrustManager}, config.getSecureRandom());
HostnameVerifier hostnameVerifier = null;
if (!config.isVerifySSLEnable()) {
hostnameVerifier = new NoopHostnameVerifier();
} else if (config.getHostnameVerifier() != null) {
hostnameVerifier = config.getHostnameVerifier();
} else {
hostnameVerifier = new DefaultHostnameVerifier();
}
sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
} catch (Exception e) {
throw new ClientException(e.getMessage());
}
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
.register(Protocol.HTTP.toString(), PlainConnectionSocketFactory.getSocketFactory())
.register(Protocol.HTTPS.toString(), sslSocketFactory).build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry);
connectionManager.setDefaultMaxPerRoute(config.getMaxConnections());
connectionManager.setMaxTotal(config.getMaxConnections());
connectionManager.setValidateAfterInactivity(config.getValidateAfterInactivity());
connectionManager.setDefaultSocketConfig(
SocketConfig.custom().setSoTimeout(config.getSocketTimeout()).setTcpNoDelay(true).build());
if (config.isUseReaper()) {
IdleConnectionReaper.setIdleConnectionTime(config.getIdleConnectionTime());
IdleConnectionReaper.registerConnectionManager(connectionManager);
}
return connectionManager;
}