Skip to content

Commit cefeae3

Browse files
fix: Fix SSL Context switching (backport of #3531) (#3532)
Signed-off-by: Pavel Jares <Pavel.Jares@broadcom.com>
1 parent 4c81a7c commit cefeae3

File tree

3 files changed

+31
-30
lines changed

3 files changed

+31
-30
lines changed

integration-tests/src/test/java/org/zowe/apiml/util/config/ConfigReaderZaasClient.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,19 @@
1818
public class ConfigReaderZaasClient {
1919

2020
public static ConfigProperties getConfigProperties() {
21-
22-
ConfigProperties configProperties = new ConfigProperties();
23-
24-
25-
configProperties.setApimlHost(environmentConfiguration().getGatewayServiceConfiguration().getHost());
26-
configProperties.setApimlPort(environmentConfiguration().getGatewayServiceConfiguration().getPort() + "");
27-
configProperties.setApimlBaseUrl(ROUTED_AUTH);
28-
configProperties.setKeyStorePath(environmentConfiguration().getTlsConfiguration().getKeyStore());
29-
configProperties.setKeyStorePassword(environmentConfiguration().getTlsConfiguration().getKeyStorePassword());
30-
configProperties.setKeyStoreType(environmentConfiguration().getTlsConfiguration().getKeyStoreType());
31-
configProperties.setTrustStorePath(environmentConfiguration().getTlsConfiguration().getTrustStore());
32-
configProperties.setTrustStorePassword(environmentConfiguration().getTlsConfiguration().getTrustStorePassword());
33-
configProperties.setTrustStoreType(environmentConfiguration().getTlsConfiguration().getTrustStoreType());
34-
configProperties.setNonStrictVerifySslCertificatesOfServices(environmentConfiguration().getTlsConfiguration().isNonStrictVerifySslCertificatesOfServices());
35-
return configProperties;
21+
return ConfigProperties.builder()
22+
.apimlHost(environmentConfiguration().getGatewayServiceConfiguration().getHost())
23+
.apimlPort(environmentConfiguration().getGatewayServiceConfiguration().getPort() + "")
24+
.apimlBaseUrl(ROUTED_AUTH)
25+
.keyStorePath(environmentConfiguration().getTlsConfiguration().getKeyStore())
26+
.keyStorePassword(environmentConfiguration().getTlsConfiguration().getKeyStorePassword())
27+
.keyStoreType(environmentConfiguration().getTlsConfiguration().getKeyStoreType())
28+
.trustStorePath(environmentConfiguration().getTlsConfiguration().getTrustStore())
29+
.trustStorePassword(environmentConfiguration().getTlsConfiguration().getTrustStorePassword())
30+
.trustStoreType(environmentConfiguration().getTlsConfiguration().getTrustStoreType())
31+
.nonStrictVerifySslCertificatesOfServices(environmentConfiguration().getTlsConfiguration().isNonStrictVerifySslCertificatesOfServices())
32+
.build();
3633
}
34+
3735
}
3836

zaas-client/src/main/java/org/zowe/apiml/zaasclient/config/ConfigProperties.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class ConfigProperties {
2929
private char[] trustStorePassword;
3030
private boolean httpOnly;
3131
private boolean nonStrictVerifySslCertificatesOfServices;
32+
@Builder.Default
33+
private String protocol = "TLS";
3234

3335
@SuppressWarnings("squid:S1075")
3436
private static final String OLD_PATH_FORMAT = "/api/v1/gateway";
@@ -41,6 +43,7 @@ public class ConfigProperties {
4143
@Tolerate
4244
public ConfigProperties() {
4345
// lombok Builder.Default bug workaround
46+
this.protocol = "TLS";
4447
this.tokenPrefix = "apimlAuthenticationToken";
4548
}
4649

@@ -54,6 +57,7 @@ public ConfigProperties withoutKeyStore() {
5457
.trustStorePassword(trustStorePassword)
5558
.httpOnly(httpOnly)
5659
.nonStrictVerifySslCertificatesOfServices(nonStrictVerifySslCertificatesOfServices)
60+
.protocol(protocol)
5761
.tokenPrefix(tokenPrefix)
5862
.build();
5963
}

zaas-client/src/main/java/org/zowe/apiml/zaasclient/service/internal/ZaasHttpsClientProvider.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
import org.zowe.apiml.zaasclient.exception.ZaasConfigurationErrorCodes;
2424
import org.zowe.apiml.zaasclient.exception.ZaasConfigurationException;
2525

26-
import javax.net.ssl.*;
26+
import javax.net.ssl.HostnameVerifier;
27+
import javax.net.ssl.KeyManagerFactory;
28+
import javax.net.ssl.SSLContext;
29+
import javax.net.ssl.TrustManagerFactory;
2730
import java.io.FileInputStream;
2831
import java.io.IOException;
2932
import java.io.InputStream;
@@ -35,36 +38,33 @@
3538

3639
@AllArgsConstructor
3740
class ZaasHttpsClientProvider implements CloseableClientProvider {
41+
3842
private static final int REQUEST_TIMEOUT = 30 * 1000;
3943

4044
private final RequestConfig requestConfig;
4145

4246
private static final Pattern KEYRING_PATTERN = Pattern.compile("^(safkeyring[^:]*):/{2,4}([^/]+)/([^/]+)$");
4347

48+
private ConfigProperties configProperties;
49+
4450
private TrustManagerFactory tmf;
4551
private KeyManagerFactory kmf;
4652

47-
private final char[] keyStorePassword;
48-
private final String keyStoreType;
49-
private final String keyStorePath;
5053
private final HostnameVerifier hostnameVerifier;
5154

5255
private final CookieStore cookieStore = new BasicCookieStore();
5356

5457
private CloseableHttpClient httpsClient;
5558

5659
public ZaasHttpsClientProvider(ConfigProperties configProperties) throws ZaasConfigurationException {
57-
this.requestConfig = this.buildCustomRequestConfig();
58-
5960
if (configProperties.getTrustStorePath() == null) {
6061
throw new ZaasConfigurationException(ZaasConfigurationErrorCodes.TRUST_STORE_NOT_PROVIDED);
6162
}
63+
this.configProperties = configProperties;
6264

65+
this.requestConfig = this.buildCustomRequestConfig();
6366
initializeTrustManagerFactory(configProperties.getTrustStorePath(), configProperties.getTrustStoreType(), configProperties.getTrustStorePassword());
6467
this.hostnameVerifier = configProperties.isNonStrictVerifySslCertificatesOfServices() ? new NoopHostnameVerifier() : SSLConnectionSocketFactory.getDefaultHostnameVerifier();
65-
this.keyStorePath = configProperties.getKeyStorePath();
66-
this.keyStorePassword = configProperties.getKeyStorePassword();
67-
this.keyStoreType = configProperties.getKeyStoreType();
6868
}
6969

7070
static boolean isKeyring(String input) {
@@ -114,14 +114,14 @@ private void initializeTrustManagerFactory(String trustStorePath, String trustSt
114114
private void initializeKeyStoreManagerFactory() throws ZaasConfigurationException {
115115
try {
116116
KeyStore keyStore;
117-
if (keyStorePath != null) {
118-
keyStore = getKeystore(keyStorePath, keyStoreType, keyStorePassword);
117+
if (configProperties.getKeyStorePath() != null) {
118+
keyStore = getKeystore(configProperties.getKeyStorePath(), configProperties.getKeyStoreType(), configProperties.getKeyStorePassword());
119119
} else {
120120
keyStore = getEmptyKeystore();
121121
}
122122

123123
kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
124-
kmf.init(keyStore, keyStorePassword);
124+
kmf.init(keyStore, configProperties.getKeyStorePassword());
125125
} catch (NoSuchAlgorithmException | CertificateException | UnrecoverableKeyException | KeyStoreException e) {
126126
throw new ZaasConfigurationException(ZaasConfigurationErrorCodes.WRONG_CRYPTO_CONFIGURATION, e);
127127
} catch (IOException e) {
@@ -155,14 +155,12 @@ private InputStream getCorrectInputStream(String uri) throws IOException {
155155

156156
private SSLContext getSSLContext() throws ZaasConfigurationException {
157157
try {
158-
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
158+
SSLContext sslContext = SSLContext.getInstance(configProperties.getProtocol());
159159
sslContext.init(
160160
kmf != null ? kmf.getKeyManagers() : null,
161161
tmf.getTrustManagers(),
162162
new SecureRandom()
163163
);
164-
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
165-
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
166164
return sslContext;
167165
} catch (NoSuchAlgorithmException | KeyManagementException e) {
168166
throw new ZaasConfigurationException(ZaasConfigurationErrorCodes.WRONG_CRYPTO_CONFIGURATION, e);
@@ -192,4 +190,5 @@ private RequestConfig buildCustomRequestConfig() {
192190
builder.setConnectTimeout(REQUEST_TIMEOUT);
193191
return builder.build();
194192
}
193+
195194
}

0 commit comments

Comments
 (0)