1919import org .apache .hc .client5 .http .impl .classic .HttpClientBuilder ;
2020import org .apache .hc .client5 .http .impl .io .PoolingHttpClientConnectionManager ;
2121import org .apache .hc .client5 .http .impl .io .PoolingHttpClientConnectionManagerBuilder ;
22- import org .apache .hc .client5 .http .ssl .DefaultHostnameVerifier ;
22+ import org .apache .hc .client5 .http .ssl .HttpsSupport ;
2323import org .apache .hc .client5 .http .ssl .NoopHostnameVerifier ;
2424import org .apache .hc .client5 .http .ssl .SSLConnectionSocketFactory ;
2525import org .apache .hc .core5 .util .Timeout ;
2626import org .zowe .apiml .zaasclient .config .ConfigProperties ;
2727import org .zowe .apiml .zaasclient .exception .ZaasConfigurationErrorCodes ;
2828import org .zowe .apiml .zaasclient .exception .ZaasConfigurationException ;
2929
30- import javax .net .ssl .HostnameVerifier ;
31- import javax .net .ssl .HttpsURLConnection ;
3230import javax .net .ssl .KeyManagerFactory ;
3331import javax .net .ssl .SSLContext ;
3432import javax .net .ssl .TrustManagerFactory ;
3533import java .io .FileInputStream ;
3634import java .io .IOException ;
3735import java .io .InputStream ;
3836import java .net .URL ;
39- import java .security .KeyManagementException ;
40- import java .security .KeyStore ;
41- import java .security .KeyStoreException ;
42- import java .security .NoSuchAlgorithmException ;
43- import java .security .SecureRandom ;
44- import java .security .UnrecoverableKeyException ;
37+ import java .security .*;
4538import java .security .cert .CertificateException ;
4639import java .util .regex .Matcher ;
4740import java .util .regex .Pattern ;
5043class ZaasHttpsClientProvider implements CloseableClientProvider {
5144 private static final int REQUEST_TIMEOUT = 30 * 1000 ;
5245
53-
5446 private static final Pattern KEYRING_PATTERN = Pattern .compile ("^(safkeyring[^:]*):/{2,4}([^/]+)/([^/]+)$" );
5547
48+ private ConfigProperties configProperties ;
49+
5650 private TrustManagerFactory tmf ;
5751 private KeyManagerFactory kmf ;
5852
5953 private final char [] keyStorePassword ;
6054 private final String keyStoreType ;
6155 private final String keyStorePath ;
62- private final HostnameVerifier hostnameVerifier ;
6356
6457 private final CookieStore cookieStore = new BasicCookieStore ();
6558
6659 private CloseableHttpClient httpsClient ;
6760
6861 public ZaasHttpsClientProvider (ConfigProperties configProperties ) throws ZaasConfigurationException {
69-
70-
7162 if (configProperties .getTrustStorePath () == null ) {
7263 throw new ZaasConfigurationException (ZaasConfigurationErrorCodes .TRUST_STORE_NOT_PROVIDED );
7364 }
7465
66+ this .configProperties = configProperties ;
67+
7568 initializeTrustManagerFactory (configProperties .getTrustStorePath (), configProperties .getTrustStoreType (), configProperties .getTrustStorePassword ());
76- this .hostnameVerifier = configProperties .isNonStrictVerifySslCertificatesOfServices () ? new NoopHostnameVerifier () : new DefaultHostnameVerifier ();
7769 this .keyStorePath = configProperties .getKeyStorePath ();
7870 this .keyStorePassword = configProperties .getKeyStorePassword ();
7971 this .keyStoreType = configProperties .getKeyStoreType ();
@@ -104,7 +96,10 @@ public synchronized CloseableHttpClient getHttpClient() throws ZaasConfiguration
10496 if (kmf == null ) {
10597 initializeKeyStoreManagerFactory ();
10698 }
107- var manager = PoolingHttpClientConnectionManagerBuilder .create ().setSSLSocketFactory (new SSLConnectionSocketFactory (getSSLContext ())).build ();
99+ var hostnameVerifier = configProperties .isNonStrictVerifySslCertificatesOfServices () ?
100+ new NoopHostnameVerifier () : HttpsSupport .getDefaultHostnameVerifier ();
101+ var sslConnectionSocketFactory = new SSLConnectionSocketFactory (getSSLContext (), hostnameVerifier );
102+ var manager = PoolingHttpClientConnectionManagerBuilder .create ().setSSLSocketFactory (sslConnectionSocketFactory ).build ();
108103
109104 httpsClient = createSecureHttpClient (manager ).build ();
110105 }
@@ -169,14 +164,12 @@ private InputStream getCorrectInputStream(String uri) throws IOException {
169164
170165 private SSLContext getSSLContext () throws ZaasConfigurationException {
171166 try {
172- SSLContext sslContext = SSLContext .getInstance ("TLSv1.2" );
167+ SSLContext sslContext = SSLContext .getInstance (configProperties . getProtocol () );
173168 sslContext .init (
174169 kmf != null ? kmf .getKeyManagers () : null ,
175170 tmf .getTrustManagers (),
176171 new SecureRandom ()
177172 );
178- HttpsURLConnection .setDefaultSSLSocketFactory (sslContext .getSocketFactory ());
179- HttpsURLConnection .setDefaultHostnameVerifier (hostnameVerifier );
180173 return sslContext ;
181174 } catch (NoSuchAlgorithmException | KeyManagementException e ) {
182175 throw new ZaasConfigurationException (ZaasConfigurationErrorCodes .WRONG_CRYPTO_CONFIGURATION , e );
@@ -197,7 +190,6 @@ public HttpClientBuilder createSecureHttpClient(PoolingHttpClientConnectionManag
197190 .evictExpiredConnections ()
198191 .evictIdleConnections (Timeout .ofSeconds (REQUEST_TIMEOUT ))
199192 .disableAuthCaching ();
200-
201193 }
202194
203195}
0 commit comments