Skip to content

Commit 064585b

Browse files
authored
Merge pull request #13 from clean-arch-enablers-project/feature/domain-name-bypass
Feature/domain name bypass
2 parents c43d34b + c032811 commit 064585b

File tree

7 files changed

+73
-8
lines changed

7 files changed

+73
-8
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<url>https://github.com/clean-arch-enablers-project/cae-utils-http-client/blob/main/README.md</url>
99
<groupId>com.clean-arch-enablers</groupId>
1010
<artifactId>cae-http-client</artifactId>
11-
<version>2.1.0</version>
11+
<version>2.2.1</version>
1212
<packaging>jar</packaging>
1313
<licenses>
1414
<license>

src/main/java/com/cae/http_client/HttpRequestBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public interface HttpRequestBuilder extends HttpRequestBuilderForHandlers{
88
HttpRequestBuilder queryParameterOf(String queryParameterName, String queryParameterValue);
99
HttpRequestBuilder proxyAddress(String host, Integer port);
1010
HttpRequestBuilder bypassSsl();
11+
HttpRequestBuilder bypassDomainCheck();
1112
HttpRequestModel buildRequestModel();
1213

1314
}

src/main/java/com/cae/http_client/implementations/AbstractHttpRequestModel.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.cae.http_client.implementations;
22

3-
import com.cae.http_client.*;
3+
import com.cae.http_client.ExceptionHandler;
4+
import com.cae.http_client.HttpRequestMethod;
5+
import com.cae.http_client.HttpRequestModel;
6+
import com.cae.http_client.HttpResponseHandler;
47

58
import java.net.http.HttpRequest.BodyPublisher;
69
import java.util.ArrayList;
@@ -18,6 +21,7 @@ public abstract class AbstractHttpRequestModel implements HttpRequestModel {
1821
protected HttpRequestMethod method;
1922
protected ProxyAddressModel proxyAddress;
2023
protected Boolean bypassSsl = false;
24+
protected Boolean bypassDomainCheck = false;
2125
protected HttpResponseHandler genericResponseHandler;
2226
protected final Map<Integer, HttpResponseHandler> responseHandlersByStatusCode = new HashMap<>();
2327
protected final Map<Class<? extends Exception>, ExceptionHandler> exceptionHandlersByExceptionType = new HashMap<>();
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.cae.http_client.implementations;
2+
3+
import lombok.AccessLevel;
4+
import lombok.NoArgsConstructor;
5+
6+
import javax.net.ssl.SSLParameters;
7+
8+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
9+
public class DomainCheckBypass {
10+
11+
public static void run(SSLParameters sslParameters){
12+
sslParameters.setEndpointIdentificationAlgorithm("");
13+
}
14+
15+
}

src/main/java/com/cae/http_client/implementations/FinalHttpRequestExecutor.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.AccessLevel;
66
import lombok.NoArgsConstructor;
77

8+
import javax.net.ssl.SSLParameters;
89
import java.io.IOException;
910
import java.net.InetSocketAddress;
1011
import java.net.ProxySelector;
@@ -38,7 +39,8 @@ public HttpResponse<String> execute(HttpRequest finalRequest){
3839
private HttpClient createClient() {
3940
var client = HttpClient.newBuilder();
4041
this.handleProxySettings(client);
41-
this.handleSslByPass(client);
42+
this.handleSslBypass(client);
43+
this.handleDomainCheckBypass(client);
4244
return client.build();
4345
}
4446

@@ -55,9 +57,18 @@ private void handleProxySettings(HttpClient.Builder client) {
5557
);
5658
}
5759

58-
private void handleSslByPass(HttpClient.Builder client) {
60+
private void handleSslBypass(HttpClient.Builder client) {
5961
if (this.httpRequestModel.bypassSsl)
6062
client.sslContext(SSLBypassSettings.getContext());
6163
}
6264

65+
private void handleDomainCheckBypass(HttpClient.Builder client) {
66+
if (this.httpRequestModel.bypassDomainCheck){
67+
var sslParameters = new SSLParameters();
68+
DomainCheckBypass.run(sslParameters);
69+
client.sslParameters(sslParameters);
70+
}
71+
}
72+
73+
6374
}

src/main/java/com/cae/http_client/implementations/HttpRequestBuilderImplementation.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ public HttpRequestBuilder bypassSsl() {
4949
return this;
5050
}
5151

52+
@Override
53+
public HttpRequestBuilder bypassDomainCheck() {
54+
this.httpRequest.bypassDomainCheck = true;
55+
return this;
56+
}
57+
5258
@Override
5359
public HttpRequestModel buildRequestModel() {
5460
return this.httpRequest;

src/main/java/com/cae/http_client/implementations/SSLBypassSettings.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import lombok.NoArgsConstructor;
55

66
import javax.net.ssl.SSLContext;
7+
import javax.net.ssl.SSLEngine;
78
import javax.net.ssl.TrustManager;
8-
import javax.net.ssl.X509TrustManager;
9+
import javax.net.ssl.X509ExtendedTrustManager;
10+
import java.net.Socket;
911
import java.security.KeyManagementException;
1012
import java.security.NoSuchAlgorithmException;
1113
import java.security.SecureRandom;
@@ -33,18 +35,44 @@ public static SSLContext getContext(){
3335
}
3436
}
3537

36-
public static class CustomTrustManager implements X509TrustManager{
38+
public static class CustomTrustManager extends X509ExtendedTrustManager {
39+
40+
public static final String BYPASS_MESSAGE = "Bypassing SSL verifications";
3741

3842
@Override
39-
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
43+
public void checkClientTrusted(X509Certificate[] certs, String authType) {
44+
System.out.println(BYPASS_MESSAGE);
45+
}
4046

4147
@Override
42-
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
48+
public void checkServerTrusted(X509Certificate[] certs, String authType) {
49+
System.out.println(BYPASS_MESSAGE);
50+
}
4351

4452
@Override
4553
public X509Certificate[] getAcceptedIssuers() {
4654
return new X509Certificate[0];
4755
}
56+
57+
@Override
58+
public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) {
59+
System.out.println(BYPASS_MESSAGE);
60+
}
61+
62+
@Override
63+
public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) {
64+
System.out.println(BYPASS_MESSAGE);
65+
}
66+
67+
@Override
68+
public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {
69+
System.out.println(BYPASS_MESSAGE);
70+
}
71+
72+
@Override
73+
public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) {
74+
System.out.println(BYPASS_MESSAGE);
75+
}
4876
}
4977

5078
public static class SSLBypassSettingsException extends RuntimeException{

0 commit comments

Comments
 (0)