1

I have a problem. How to create SSL websocket client with self signed.

mServer = new AsyncHttpServer();
 mServer.websocket("/get", new AsyncHttpServer.WebSocketRequestCallback() {
        @Override
        public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) {
            _sockets.add(webSocket);

            webSocket.setClosedCallback(new CompletedCallback() {
                @Override
                public void onCompleted(Exception ex) {
                    try {
                        if (ex != null)
                            Log.e("WebSocket", "Error");
                    } finally {
                        _sockets.remove(webSocket);
                    }
                }
            });

            webSocket.setStringCallback(new WebSocket.StringCallback() {
                @Override
                public void onStringAvailable(final String s) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
                        }
                    });

                    if ("Hello Server".equals(s))
                        webSocket.send("Welcome Client!");
                    else
                        webSocket.send(s);
                }
            });


            btnTest.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    webSocket.send("I am server!!!");
                }
            });
        }
    });

   // mServer.listen(8080);
    SSLContext sslContext = null;
    MySSLContext mySSLContext = new MySSLContext();

    try {
        sslContext = mySSLContext.getSSLContext();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }

    mServer.listenSecure(8080, sslContext);

my server coding

public SSLContext getSSLContext() throws NoSuchAlgorithmException, KeyManagementException {
    SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(null, new TrustManager[]{ new X509TrustManager() {
        @Override
        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

        }

        @Override
        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }}, new SecureRandom());

    return sslContext;
}

get SSLContext method

AsyncHttpClient client = AsyncHttpClient.getDefaultInstance();
    AsyncSSLSocketMiddleware sslSocketMiddleware = new AsyncSSLSocketMiddleware(client);
    MySSLContext mySSLContext = new MySSLContext();
    SSLContext sslContext = null;
    try {
        sslContext = mySSLContext.getSSLContext();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }
    sslSocketMiddleware.setSSLContext(sslContext);

    client.insertMiddleware(sslSocketMiddleware);


    client.websocket("https://192.168.88.11:8080/get", null, new AsyncHttpClient.WebSocketConnectCallback() {
        @Override
        public void onCompleted(Exception ex, WebSocket webSocket) {
            if (ex != null) {
                ex.printStackTrace();
                return;
            }


            webSocket.setStringCallback(new WebSocket.StringCallback() {
                @Override
                public void onStringAvailable(final String s) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
                        }
                    });
                    Log.d("StringCallback", s);
                }
            });
            webSocket.send("Hello Server");

            webSocket.setClosedCallback(new CompletedCallback() {
                @Override
                public void onCompleted(Exception ex) {
                    Log.d(TAG, "Closed/onCompleted:" + ex.getMessage());
                }
            });

            webSocket.setEndCallback(new CompletedCallback() {
                @Override
                public void onCompleted(Exception ex) {
                    Log.d(TAG, "End/onCompleted:" + ex.getMessage());
                }
            });
        }

    });

this is my client coding

Then, i got

javax.net.ssl.SSLException: socket closed during handshake..

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.