Skip to content

Commit 6dfaa4e

Browse files
authored
Merge pull request #12 from MobileID-Strong-Authentication/dev-sslctx-restcfg
Support for REST endpoints, sslcontext protocol config, added geofencing param for mobileid cli
2 parents a40c34e + 915b46c commit 6dfaa4e

File tree

19 files changed

+208
-170
lines changed

19 files changed

+208
-170
lines changed

mid-java-client-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>ch.mobileid.mid-java-client</groupId>
88
<artifactId>mid-java-client-parent</artifactId>
9-
<version>1.5.4</version>
9+
<version>1.5.5</version>
1010
</parent>
1111

1212
<artifactId>mid-java-client-core</artifactId>

mid-java-client-rest/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>ch.mobileid.mid-java-client</groupId>
88
<artifactId>mid-java-client-parent</artifactId>
9-
<version>1.5.4</version>
9+
<version>1.5.5</version>
1010
</parent>
1111

1212
<artifactId>mid-java-client-rest</artifactId>

mid-java-client-rest/src/main/java/ch/swisscom/mid/client/rest/ComProtocolHandlerRestImpl.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.security.KeyStore;
5252
import java.util.concurrent.TimeUnit;
5353

54+
import javax.net.ssl.SSLContext;
5455
import javax.net.ssl.SSLException;
5556

5657
import ch.swisscom.mid.client.MIDFlowException;
@@ -102,15 +103,26 @@ public void initialize(ClientConfiguration config) {
102103
.loadKeyMaterial(produceAKeyStore(tlsConfig),
103104
tlsConfig.getKeyStoreKeyPassword() == null ? null : tlsConfig.getKeyStoreKeyPassword().toCharArray(),
104105
produceAPrivateKeyStrategy(tlsConfig));
106+
107+
if (tlsConfig.getSslContext() != null) {
108+
sslContextBuilder.setProtocol(tlsConfig.getSslContext());
109+
}
110+
105111
if (trustStoreIsConfigured(tlsConfig)) {
106112
sslContextBuilder.loadTrustMaterial(produceATrustStore(tlsConfig), null);
107113
}
114+
115+
final SSLContext sslCtx = sslContextBuilder.build();
108116
if (tlsConfig.isHostnameVerification()) {
109-
sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build());
117+
sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslCtx);
110118
} else {
111-
sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(),
119+
sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslCtx,
112120
NoopHostnameVerifier.INSTANCE);
113121
}
122+
123+
if (tlsConfig.getSslContext() == null && sslCtx != null) {
124+
logConfig.debug("Evaluated sslContext protocol for Rest HTTP Client = [{}]", sslCtx.getProtocol());
125+
}
114126
} catch (Exception e) {
115127
throw new ConfigurationException("Failed to configure the TLS/SSL connection factory for the MID client", e);
116128
}
@@ -149,6 +161,8 @@ public void initialize(ClientConfiguration config) {
149161
.setConnectionManager(connectionManager)
150162
.setDefaultRequestConfig(httpClientRequestConfig)
151163
.build();
164+
165+
152166
}
153167

154168
@Override
@@ -271,9 +285,10 @@ private void logTlsConfiguration(TlsConfiguration tlsConfig) {
271285
"key store type: [{}], " +
272286
"key store alias: [{}], " +
273287
"trust store source: [{}], " +
274-
"trust store type: [{}]",
288+
"trust store type: [{}], " +
289+
"tls ssl context: [{}]",
275290
keyStoreSource, tlsConfig.getKeyStoreType(), tlsConfig.getKeyStoreCertificateAlias(),
276-
trustStoreSource, tlsConfig.getTrustStoreType());
291+
trustStoreSource, tlsConfig.getTrustStoreType(), tlsConfig.getSslContext());
277292
}
278293

279294
private KeyStore produceAKeyStore(TlsConfiguration tlsConfig) {

mid-java-client-rest/src/test/java/ch/swisscom/mid/client/rest/AsyncSignatureTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package ch.swisscom.mid.client.rest;
1717

18+
import ch.swisscom.mid.client.config.TlsConfiguration;
1819
import com.github.tomakehurst.wiremock.WireMockServer;
1920
import com.github.tomakehurst.wiremock.http.MimeType;
2021
import com.github.tomakehurst.wiremock.stubbing.Scenario;
@@ -30,8 +31,7 @@
3031
import ch.swisscom.mid.client.model.*;
3132

3233
import static ch.swisscom.mid.client.rest.TestData.*;
33-
import static ch.swisscom.mid.client.rest.TestSupport.buildConfig;
34-
import static ch.swisscom.mid.client.rest.TestSupport.fileToString;
34+
import static ch.swisscom.mid.client.rest.TestSupport.*;
3535
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
3636
import static com.github.tomakehurst.wiremock.client.WireMock.containing;
3737
import static com.github.tomakehurst.wiremock.client.WireMock.post;
@@ -52,7 +52,7 @@ public static void setUpThisClass() {
5252
server = new WireMockServer(options().port(8089));
5353
server.start();
5454

55-
client = new MIDClientImpl(buildConfig());
55+
client = new MIDClientImpl(buildConfig(buildTlsConfig("TLSv1.2")));
5656
}
5757

5858
@BeforeEach
@@ -228,5 +228,4 @@ private static SignatureRequest buildSignatureRequest() {
228228
request.addAdditionalService(new GeofencingAdditionalService());
229229
return request;
230230
}
231-
232231
}

mid-java-client-rest/src/test/java/ch/swisscom/mid/client/rest/ProfileQueryTest.java

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,22 @@
1515
*/
1616
package ch.swisscom.mid.client.rest;
1717

18-
import com.github.tomakehurst.wiremock.WireMockServer;
19-
import com.github.tomakehurst.wiremock.http.MimeType;
20-
21-
import org.junit.jupiter.api.AfterAll;
22-
import org.junit.jupiter.api.BeforeAll;
23-
import org.junit.jupiter.api.Test;
24-
2518
import ch.swisscom.mid.client.MIDClient;
2619
import ch.swisscom.mid.client.config.DefaultConfiguration;
2720
import ch.swisscom.mid.client.impl.MIDClientImpl;
2821
import ch.swisscom.mid.client.model.ProfileRequest;
2922
import ch.swisscom.mid.client.model.ProfileResponse;
3023
import ch.swisscom.mid.client.model.SignatureProfiles;
24+
import com.github.tomakehurst.wiremock.WireMockServer;
25+
import com.github.tomakehurst.wiremock.http.MimeType;
26+
import org.junit.jupiter.api.AfterAll;
27+
import org.junit.jupiter.api.BeforeAll;
28+
import org.junit.jupiter.api.Test;
3129

3230
import static ch.swisscom.mid.client.rest.TestData.CUSTOM_AP_ID;
3331
import static ch.swisscom.mid.client.rest.TestData.CUSTOM_AP_PASSWORD;
34-
import static ch.swisscom.mid.client.rest.TestSupport.buildConfig;
35-
import static ch.swisscom.mid.client.rest.TestSupport.fileToString;
36-
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
37-
import static com.github.tomakehurst.wiremock.client.WireMock.containing;
38-
import static com.github.tomakehurst.wiremock.client.WireMock.post;
39-
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
32+
import static ch.swisscom.mid.client.rest.TestSupport.*;
33+
import static com.github.tomakehurst.wiremock.client.WireMock.*;
4034
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
4135
import static org.hamcrest.MatcherAssert.assertThat;
4236
import static org.hamcrest.Matchers.contains;
@@ -51,7 +45,7 @@ public static void setUpThisClass() {
5145
server = new WireMockServer(options().port(8089));
5246
server.start();
5347

54-
client = new MIDClientImpl(buildConfig());
48+
client = new MIDClientImpl(buildConfig(buildTlsConfig("TLSv1.1")));
5549
}
5650

5751
@AfterAll
@@ -65,31 +59,31 @@ public static void tearDownThisClass() {
6559
@Test
6660
public void testProfileQuery_success() {
6761
server.stubFor(
68-
post(urlEqualTo(DefaultConfiguration.REST_ENDPOINT_SUB_URL))
69-
.willReturn(
70-
aResponse()
71-
.withHeader("Content-Type", MimeType.JSON.toString())
72-
.withBody(fileToString("/samples/rest-response-profile-query.json"))));
62+
post(urlEqualTo(DefaultConfiguration.REST_ENDPOINT_SUB_URL))
63+
.willReturn(
64+
aResponse()
65+
.withHeader("Content-Type", MimeType.JSON.toString())
66+
.withBody(fileToString("/samples/rest-response-profile-query.json"))));
7367

7468
ProfileRequest request = new ProfileRequest();
7569
request.getMobileUser().setMsisdn("418888888888");
7670
request.setExtensionParamsToAllValues();
7771

7872
ProfileResponse response = client.requestProfile(request);
7973
assertThat(response.getSignatureProfiles(),
80-
contains(SignatureProfiles.ANY_LOA4, SignatureProfiles.DEFAULT_PROFILE, SignatureProfiles.STK_LOA4));
74+
contains(SignatureProfiles.ANY_LOA4, SignatureProfiles.DEFAULT_PROFILE, SignatureProfiles.STK_LOA4));
8175
}
8276

8377
@Test
8478
public void testProfileQuery_success_customApIdAndPassword() {
8579
server.stubFor(
86-
post(urlEqualTo(DefaultConfiguration.REST_ENDPOINT_SUB_URL))
87-
.withRequestBody(containing("\"" + CUSTOM_AP_ID + "\""))
88-
.withRequestBody(containing("\"" + CUSTOM_AP_PASSWORD + "\""))
89-
.willReturn(
90-
aResponse()
91-
.withHeader("Content-Type", MimeType.JSON.toString())
92-
.withBody(fileToString("/samples/rest-response-profile-query.json"))));
80+
post(urlEqualTo(DefaultConfiguration.REST_ENDPOINT_SUB_URL))
81+
.withRequestBody(containing("\"" + CUSTOM_AP_ID + "\""))
82+
.withRequestBody(containing("\"" + CUSTOM_AP_PASSWORD + "\""))
83+
.willReturn(
84+
aResponse()
85+
.withHeader("Content-Type", MimeType.JSON.toString())
86+
.withBody(fileToString("/samples/rest-response-profile-query.json"))));
9387

9488
ProfileRequest request = new ProfileRequest();
9589
request.getMobileUser().setMsisdn("418888888888");
@@ -99,7 +93,6 @@ public void testProfileQuery_success_customApIdAndPassword() {
9993

10094
ProfileResponse response = client.requestProfile(request);
10195
assertThat(response.getSignatureProfiles(),
102-
contains(SignatureProfiles.ANY_LOA4, SignatureProfiles.DEFAULT_PROFILE, SignatureProfiles.STK_LOA4));
96+
contains(SignatureProfiles.ANY_LOA4, SignatureProfiles.DEFAULT_PROFILE, SignatureProfiles.STK_LOA4));
10397
}
104-
10598
}

mid-java-client-rest/src/test/java/ch/swisscom/mid/client/rest/SyncSignatureTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package ch.swisscom.mid.client.rest;
1717

18+
import ch.swisscom.mid.client.config.TlsConfiguration;
1819
import com.github.tomakehurst.wiremock.WireMockServer;
1920
import com.github.tomakehurst.wiremock.http.MimeType;
2021

@@ -30,8 +31,8 @@
3031

3132
import static ch.swisscom.mid.client.rest.TestData.CUSTOM_AP_ID;
3233
import static ch.swisscom.mid.client.rest.TestData.CUSTOM_AP_PASSWORD;
33-
import static ch.swisscom.mid.client.rest.TestSupport.buildConfig;
34-
import static ch.swisscom.mid.client.rest.TestSupport.fileToString;
34+
import static ch.swisscom.mid.client.rest.TestSupport.*;
35+
import static ch.swisscom.mid.client.rest.TestSupport.fileToBytes;
3536
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
3637
import static com.github.tomakehurst.wiremock.client.WireMock.containing;
3738
import static com.github.tomakehurst.wiremock.client.WireMock.post;
@@ -52,7 +53,8 @@ public static void setUpThisClass() {
5253
server = new WireMockServer(options().port(8089));
5354
server.start();
5455

55-
client = new MIDClientImpl(buildConfig());
56+
// client = new MIDClientImpl(buildConfig(buildTlsConfig("TLSv1.1")));
57+
client = new MIDClientImpl(buildConfig(buildTlsConfig(null)));
5658
}
5759

5860
@AfterAll
@@ -165,5 +167,4 @@ private static SignatureRequest buildSignatureRequest() {
165167
request.addAdditionalService(new GeofencingAdditionalService());
166168
return request;
167169
}
168-
169170
}

mid-java-client-rest/src/test/java/ch/swisscom/mid/client/rest/TestSupport.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
public class TestSupport {
3131

32-
public static ClientConfiguration buildConfig() {
32+
public static ClientConfiguration buildConfig(TlsConfiguration customTlsCfg) {
3333
ClientConfiguration config = new ClientConfiguration();
3434
config.setProtocolToRest();
3535
config.setApId("mid://test.swisscom.ch");
@@ -38,14 +38,18 @@ public static ClientConfiguration buildConfig() {
3838
UrlsConfiguration urls = config.getUrls();
3939
urls.setAllServiceUrlsTo("http://localhost:8089" + DefaultConfiguration.REST_ENDPOINT_SUB_URL);
4040

41-
TlsConfiguration tls = config.getTls();
42-
tls.setKeyStoreBytes(fileToBytes("/empty-store.jks"));
43-
tls.setKeyStorePassword("secret");
44-
tls.setKeyStoreKeyPassword("secret");
45-
tls.setKeyStoreCertificateAlias("alias");
46-
tls.setTrustStoreBytes(fileToBytes("/empty-store.jks"));
47-
tls.setTrustStorePassword("secret");
48-
tls.setHostnameVerification(false);
41+
if (customTlsCfg != null) {
42+
config.setTls(customTlsCfg);
43+
} else {
44+
TlsConfiguration tls = config.getTls();
45+
tls.setKeyStoreBytes(fileToBytes("/empty-store.jks"));
46+
tls.setKeyStorePassword("secret");
47+
tls.setKeyStoreKeyPassword("secret");
48+
tls.setKeyStoreCertificateAlias("alias");
49+
tls.setTrustStoreBytes(fileToBytes("/empty-store.jks"));
50+
tls.setTrustStorePassword("secret");
51+
tls.setHostnameVerification(false);
52+
}
4953

5054
HttpConfiguration http = config.getHttp();
5155
http.setConnectionTimeoutInMs(2 * 1000);
@@ -70,5 +74,19 @@ public static byte[] fileToBytes(String fileName) {
7074
}
7175
}
7276

77+
public static TlsConfiguration buildTlsConfig(String sslContext) {
78+
TlsConfiguration tls = new TlsConfiguration();
79+
tls.setKeyStoreBytes(fileToBytes("/empty-store.jks"));
80+
tls.setKeyStorePassword("secret");
81+
tls.setKeyStoreKeyPassword("secret");
82+
tls.setKeyStoreCertificateAlias("alias");
83+
tls.setTrustStoreBytes(fileToBytes("/empty-store.jks"));
84+
tls.setTrustStorePassword("secret");
85+
tls.setHostnameVerification(false);
86+
if (sslContext != null) {
87+
tls.setSslContext(sslContext);
88+
}
89+
return tls;
90+
}
7391

7492
}

mid-java-client-soap/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>ch.mobileid.mid-java-client</groupId>
88
<artifactId>mid-java-client-parent</artifactId>
9-
<version>1.5.4</version>
9+
<version>1.5.5</version>
1010
</parent>
1111

1212
<artifactId>mid-java-client-soap</artifactId>

0 commit comments

Comments
 (0)