Skip to content

Commit e89afb4

Browse files
committed
Handle self-signed certs in OSHConnect-Java library
1 parent 6c6e9c6 commit e89afb4

1 file changed

Lines changed: 43 additions & 1 deletion

File tree

‎src/main/java/org/sensorhub/oshconnect/net/websocket/WebSocketConnection.java‎

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,35 @@
44
*/
55
package org.sensorhub.oshconnect.net.websocket;
66

7+
import org.eclipse.jetty.util.ssl.SslContextFactory;
78
import org.eclipse.jetty.websocket.api.Session;
89
import org.eclipse.jetty.websocket.api.WebSocketListener;
910
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
1011
import org.eclipse.jetty.websocket.client.WebSocketClient;
1112
import org.sensorhub.oshconnect.OSHNode;
1213

14+
import javax.net.ssl.HttpsURLConnection;
15+
import javax.net.ssl.SSLContext;
16+
import javax.net.ssl.TrustManager;
17+
import javax.net.ssl.X509TrustManager;
1318
import java.net.URI;
19+
import java.security.SecureRandom;
20+
import java.security.cert.X509Certificate;
1421
import java.util.ArrayList;
1522
import java.util.List;
1623

24+
1725
/**
1826
* Class representing an active connection to a WebSocket.
1927
*/
2028
public class WebSocketConnection implements WebSocketListener {
2129
private final StreamListener streamListener;
2230
private final String request;
23-
private final WebSocketClient client = new WebSocketClient();
31+
private WebSocketClient client = null; //new WebSocketClient();
2432
private final List<StatusListener> statusListeners = new ArrayList<>();
2533
private StreamStatus status = StreamStatus.DISCONNECTED;
34+
private SSLContext sslContext = null;
35+
private final SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
2636

2737
public WebSocketConnection(StreamListener streamListener, String request) {
2838
this.streamListener = streamListener;
@@ -37,6 +47,38 @@ public void connect() {
3747
clientUpgradeRequest.setHeader("Authorization", "Basic " + parentNode.getAuthorizationToken());
3848

3949
try {
50+
51+
TrustManager[] trustAllCerts = new TrustManager[]{
52+
new X509TrustManager() {
53+
@Override
54+
public X509Certificate[] getAcceptedIssuers() {
55+
return new X509Certificate[0];
56+
}
57+
58+
@Override
59+
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
60+
61+
@Override
62+
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
63+
}
64+
};
65+
66+
if ( null == sslContext ) {
67+
sslContext = SSLContext.getInstance("TLS");
68+
sslContext.init(null, trustAllCerts, new SecureRandom());
69+
SSLContext.setDefault(sslContext);
70+
71+
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
72+
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
73+
74+
sslContextFactory.setSslContext(sslContext);
75+
76+
}
77+
sslContextFactory.getSslContext().getClientSessionContext().setSessionTimeout(0);
78+
sslContextFactory.getSslContext().getClientSessionContext().setSessionCacheSize(0);
79+
80+
client = new WebSocketClient(sslContextFactory);
81+
4082
client.start();
4183
client.connect(this, new URI(urlString), clientUpgradeRequest);
4284
} catch (Exception e) {

0 commit comments

Comments
 (0)