Skip to content

Commit ebfee87

Browse files
JAVA-23317 | Added dummy TrustManager (eugenp#14444)
* JAVA-23317 | Added dummy TrustManager * JAVA-23317 | Added comment * JAVA-23317 | renamed dummy to mock * JAVA-23317 | renamed unit test
1 parent 9080604 commit ebfee87

File tree

1 file changed

+59
-4
lines changed

1 file changed

+59
-4
lines changed

core-java-modules/core-java-11-2/src/test/java/com/baeldung/httpclient/ssl/HttpClientSSLBypassUnitTest.java

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,84 @@
44
import org.junit.jupiter.api.Test;
55

66
import java.io.IOException;
7+
import java.net.Socket;
78
import java.net.URI;
9+
import java.net.URISyntaxException;
810
import java.net.http.HttpClient;
911
import java.net.http.HttpRequest;
1012
import java.net.http.HttpResponse;
13+
import java.security.KeyManagementException;
14+
import java.security.NoSuchAlgorithmException;
15+
import java.security.SecureRandom;
16+
import java.security.cert.X509Certificate;
1117
import java.util.Properties;
1218

19+
import javax.net.ssl.SSLContext;
20+
import javax.net.ssl.SSLEngine;
21+
import javax.net.ssl.TrustManager;
22+
import javax.net.ssl.X509ExtendedTrustManager;
23+
1324
public class HttpClientSSLBypassUnitTest {
1425

1526
@Test
16-
public void whenHttpsRequest_thenCorrect() throws IOException, InterruptedException {
27+
public void givenDisableUsingJVMProperty_whenByPassCertificationVerification_thenSuccessHttpResponse() throws IOException, InterruptedException {
1728
final Properties props = System.getProperties();
1829
props.setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString());
1930

2031
HttpClient httpClient = HttpClient.newBuilder()
21-
.build();
32+
.build();
2233

2334
HttpRequest request = HttpRequest.newBuilder()
24-
.uri(URI.create("https://wrong.host.badssl.com/"))
25-
.build();
35+
.uri(URI.create("https://wrong.host.badssl.com/"))
36+
.build();
2637

2738
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
2839
props.setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.FALSE.toString());
2940

3041
Assertions.assertEquals(200, response.statusCode());
3142
}
43+
44+
@Test
45+
public void givenMockTrustManager_whenByPassCertificateVerification_thenSuccessHttpResponse() throws IOException, InterruptedException, NoSuchAlgorithmException, KeyManagementException, URISyntaxException {
46+
SSLContext sslContext = SSLContext.getInstance("SSL"); // OR TLS
47+
sslContext.init(null, new TrustManager[]{ MOCK_TRUST_MANAGER }, new SecureRandom());
48+
HttpClient httpClient = HttpClient.newBuilder().sslContext(sslContext).build();
49+
HttpRequest request = HttpRequest.newBuilder()
50+
.uri(new URI("https://wrong.host.badssl.com/"))
51+
.build();
52+
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
53+
Assertions.assertEquals(200, response.statusCode());
54+
}
55+
56+
57+
private static final TrustManager MOCK_TRUST_MANAGER = new X509ExtendedTrustManager() {
58+
@Override
59+
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
60+
return new java.security.cert.X509Certificate[0];
61+
}
62+
63+
@Override
64+
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
65+
}
66+
67+
@Override
68+
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
69+
}
70+
71+
@Override
72+
public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {
73+
}
74+
75+
@Override
76+
public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) {
77+
}
78+
79+
@Override
80+
public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {
81+
}
82+
83+
@Override
84+
public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) {
85+
}
86+
};
3287
}

0 commit comments

Comments
 (0)