44 */
55package org .sensorhub .oshconnect .net .websocket ;
66
7+ import org .eclipse .jetty .util .ssl .SslContextFactory ;
78import org .eclipse .jetty .websocket .api .Session ;
89import org .eclipse .jetty .websocket .api .WebSocketListener ;
910import org .eclipse .jetty .websocket .client .ClientUpgradeRequest ;
1011import org .eclipse .jetty .websocket .client .WebSocketClient ;
1112import 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 ;
1318import java .net .URI ;
19+ import java .security .SecureRandom ;
20+ import java .security .cert .X509Certificate ;
1421import java .util .ArrayList ;
1522import java .util .List ;
1623
24+
1725/**
1826 * Class representing an active connection to a WebSocket.
1927 */
2028public 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