Skip to content

Commit 964c4fa

Browse files
authored
fix: wrong using of certificates in ZAAS client (#1514)
* fix Signed-off-by: Pavel Jareš <pavel.jares@broadcom.com> * fix by review Signed-off-by: Pavel Jareš <pavel.jares@broadcom.com>
1 parent d5bd200 commit 964c4fa

File tree

6 files changed

+54
-18
lines changed

6 files changed

+54
-18
lines changed

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@
99
*/
1010
package org.zowe.apiml.zaasclient.config;
1111

12+
import lombok.Builder;
1213
import lombok.Data;
14+
import lombok.experimental.Tolerate;
1315

1416
@Data
17+
@Builder
1518
public class ConfigProperties {
19+
1620
private String apimlHost;
1721
private String apimlPort;
1822
private String apimlBaseUrl;
@@ -24,4 +28,23 @@ public class ConfigProperties {
2428
private char[] trustStorePassword;
2529
private boolean httpOnly;
2630
private boolean nonStrictVerifySslCertificatesOfServices;
31+
32+
@Tolerate
33+
public ConfigProperties() {
34+
// no args constructor
35+
}
36+
37+
public ConfigProperties withoutKeyStore() {
38+
return ConfigProperties.builder()
39+
.apimlHost(apimlHost)
40+
.apimlPort(apimlPort)
41+
.apimlBaseUrl(apimlBaseUrl)
42+
.trustStoreType(trustStoreType)
43+
.trustStorePath(trustStorePath)
44+
.trustStorePassword(trustStorePassword)
45+
.httpOnly(httpOnly)
46+
.nonStrictVerifySslCertificatesOfServices(nonStrictVerifySslCertificatesOfServices)
47+
.build();
48+
}
49+
2750
}

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.zowe.apiml.zaasclient.config.ConfigProperties;
1414
import org.zowe.apiml.zaasclient.exception.ZaasClientErrorCodes;
1515
import org.zowe.apiml.zaasclient.exception.ZaasClientException;
16+
import org.zowe.apiml.zaasclient.exception.ZaasConfigurationErrorCodes;
1617
import org.zowe.apiml.zaasclient.exception.ZaasConfigurationException;
1718
import org.zowe.apiml.zaasclient.service.ZaasClient;
1819
import org.zowe.apiml.zaasclient.service.ZaasToken;
@@ -26,12 +27,17 @@ public class ZaasClientImpl implements ZaasClient {
2627
private final PassTicketService passTickets;
2728

2829
public ZaasClientImpl(ConfigProperties configProperties) throws ZaasConfigurationException {
30+
if (!configProperties.isHttpOnly() && (configProperties.getKeyStorePath() == null)) {
31+
throw new ZaasConfigurationException(ZaasConfigurationErrorCodes.KEY_STORE_NOT_PROVIDED);
32+
}
33+
2934
CloseableClientProvider httpClientProvider = getTokenProvider(configProperties);
35+
CloseableClientProvider httpClientProviderWithoutCert = getTokenProviderWithoutCert(configProperties, httpClientProvider);
36+
3037
String baseUrl = String.format("%s://%s:%s%s", getScheme(configProperties.isHttpOnly()), configProperties.getApimlHost(), configProperties.getApimlPort(),
3138
configProperties.getApimlBaseUrl());
32-
tokens = new ZaasJwtService(httpClientProvider, baseUrl);
39+
tokens = new ZaasJwtService(httpClientProviderWithoutCert, baseUrl);
3340
passTickets = new PassTicketServiceImpl(httpClientProvider, baseUrl);
34-
3541
}
3642

3743
private CloseableClientProvider getTokenProvider(ConfigProperties configProperties) throws ZaasConfigurationException {
@@ -40,7 +46,16 @@ private CloseableClientProvider getTokenProvider(ConfigProperties configProperti
4046
} else {
4147
return new ZaasHttpsClientProvider(configProperties);
4248
}
49+
}
4350

51+
private CloseableClientProvider getTokenProviderWithoutCert (
52+
ConfigProperties configProperties,
53+
CloseableClientProvider defaultCloseableClientProvider) throws ZaasConfigurationException
54+
{
55+
if (configProperties.isHttpOnly()) {
56+
return defaultCloseableClientProvider;
57+
}
58+
return getTokenProvider(configProperties.withoutKeyStore());
4459
}
4560

4661
private Object getScheme(boolean httpOnly) {

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,8 @@ public void clearCookieStore() {
7171

7272
@Override
7373
public synchronized CloseableHttpClient getHttpClient() throws ZaasConfigurationException {
74-
if (keyStorePath == null) {
75-
throw new ZaasConfigurationException(ZaasConfigurationErrorCodes.KEY_STORE_NOT_PROVIDED);
76-
}
7774
if (httpsClientWithKeyStoreAndTrustStore == null) {
78-
if (kmf == null) {
75+
if ((kmf == null) && (keyStorePath != null)) {
7976
initializeKeyStoreManagerFactory();
8077
}
8178
httpsClientWithKeyStoreAndTrustStore = sharedHttpClientConfiguration(getSSLContext())

zaas-client/src/test/java/org/zowe/apiml/zaasclient/service/internal/ZaasClientImplHttpTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ void testHttpOnlyZaasClientCanBeCreated() throws ZaasConfigurationException {
2525
configProperties.setApimlPort("10010");
2626
configProperties.setApimlBaseUrl("/api/v1/gateway/auth");
2727
configProperties.setNonStrictVerifySslCertificatesOfServices(false);
28+
configProperties.setKeyStorePath("keystorePath");
2829
ZaasClient client = new ZaasClientImpl(configProperties);
2930
assertNotNull(client);
3031
}

zaas-client/src/test/java/org/zowe/apiml/zaasclient/service/internal/ZaasClientTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.junit.jupiter.params.ParameterizedTest;
1515
import org.junit.jupiter.params.provider.Arguments;
1616
import org.junit.jupiter.params.provider.MethodSource;
17+
import org.zowe.apiml.zaasclient.config.ConfigProperties;
1718
import org.zowe.apiml.zaasclient.exception.ZaasClientErrorCodes;
1819
import org.zowe.apiml.zaasclient.exception.ZaasClientException;
1920
import org.zowe.apiml.zaasclient.exception.ZaasConfigurationException;
@@ -146,4 +147,15 @@ void givenValidToken_whenLogoutIsCalled_thenSuccessLogout() {
146147
assertDoesNotThrow(() -> underTest.logout("apimlAuthenticationToken=" + VALID_TOKEN));
147148
}
148149

150+
@Test
151+
void givenNullKeyStorePath_whenTheClientIsConstructed_thenExceptionIsThrown() {
152+
ConfigProperties config = new ConfigProperties();
153+
config.setTrustStorePassword(VALID_PASSWORD.toCharArray());
154+
config.setTrustStorePath("src/test/resources/localhost.truststore.p12");
155+
config.setTrustStoreType("PKCS12");
156+
ZaasConfigurationException zaasException = assertThrows(ZaasConfigurationException.class, () -> new ZaasClientImpl(config));
157+
158+
assertThat(zaasException.getErrorCode().getId(), is("ZWEAS501E"));
159+
}
160+
149161
}

zaas-client/src/test/java/org/zowe/apiml/zaasclient/service/internal/ZaasHttpsClientProviderTests.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,6 @@ void giveInvalidTrustStorePath_whenTheClientIsConstructed_thenExceptionsIsThrown
102102
assertThat(zaasException.getErrorCode().getId(), is("ZWEAS503E"));
103103
}
104104

105-
@Test
106-
void givenNullKeyStorePath_whenTheClientIsConstructed_thenExceptionIsThrown() throws ZaasConfigurationException {
107-
ConfigProperties config = new ConfigProperties();
108-
config.setTrustStorePassword(PASSWORD);
109-
config.setTrustStorePath("src/test/resources/localhost.truststore.p12");
110-
config.setTrustStoreType("PKCS12");
111-
ZaasHttpsClientProvider provider = new ZaasHttpsClientProvider(config);
112-
ZaasConfigurationException zaasException = assertThrows(ZaasConfigurationException.class, provider::getHttpClient);
113-
114-
assertThat(zaasException.getErrorCode().getId(), is("ZWEAS501E"));
115-
}
116-
117105
@Test
118106
void givenInvalidKeyStorePath_whenTheClientIsConstructed_thenExceptionIsThrown() throws ZaasConfigurationException {
119107
ConfigProperties config = new ConfigProperties();

0 commit comments

Comments
 (0)