javax.net.ssl.SSLProtocolException ниже нуга

Я пытаюсь подключить мой Android-клиент с Meteor Server.

Код успешно работает на устройствах выше зефира. но не работает на зефире и ниже устройств.

я использую эту библиотеку для подключения моего метеорного сервера

я получаю ошибку ниже, когда я пытаюсь ниже реализации на устройствах ниже нуга

javax.net.ssl.SSLProtocolException: рукопожатие SSL прервано: ssl=0xb4067000: сбой в библиотеке SSL, обычно ошибка протокола:14077102: подпрограммы SSL:SSL23_GET_SERVER_HELLO: неподдерживаемый протокол (external/openssl/ssl/s23_clnt.c:740: 740: 740: 740: 040 0x00000000)

            String exampleUri = "wss://myurl";
            WebSocketFactory webSocketFactory = new WebSocketFactory();
            webSocketFactory.setSocketFactory(new TLSSocketFactory());
            webSocketFactory.setVerifyHostname(false);
            WebSocket ws = webSocketFactory
                    .setConnectionTimeout(25000)
                    .createSocket(exampleUri)
                    .setPingInterval(20 * 1000)
                    .addListener(new WebSocketAdapter() {
                        // A text message arrived from the server.
                        public void onTextMessage(WebSocket websocket, String message) {
                            System.out.println(message);
                        }

                        @Override
                        public void onError(WebSocket websocket, WebSocketException cause) throws Exception {
                            super.onError(websocket, cause);
                        }

                        @Override
                        public void onConnectError(WebSocket websocket, WebSocketException exception) throws Exception {
                            super.onConnectError(websocket, exception);
                        }

                        @Override
                        public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception {
                            super.onConnected(websocket, headers);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "connected", Toast.LENGTH_LONG).show();
                                    Log.e("Connected", "true");
                                }
                            });
                        }
                    });
            ws.clearProtocols();
            ws.connectAsynchronously();
            return true;
        } catch (Exception e1) {
            e1.printStackTrace();
        }  

TLSSocketFacory.java

public class TLSSocketFactory extends SSLSocketFactory {

    private SSLSocketFactory internalSSLSocketFactory;

    public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, null, null);
        internalSSLSocketFactory = context.getSocketFactory();
    }

    @Override
    public String[] getDefaultCipherSuites() {
        return internalSSLSocketFactory.getDefaultCipherSuites();
    }

    @Override
    public String[] getSupportedCipherSuites() {
        return internalSSLSocketFactory.getSupportedCipherSuites();
    }

    @Override
    public Socket createSocket() throws IOException {
        return enableTLSOnSocket(internalSSLSocketFactory.createSocket());
    }

    @Override
    public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
    }

    @Override
    public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
    }

    @Override
    public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
    }

    @Override
    public Socket createSocket(InetAddress host, int port) throws IOException {
        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
    }

    @Override
    public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
    }

    private Socket enableTLSOnSocket(Socket socket) {
        if (socket != null && (socket instanceof SSLSocket)) {
            ((SSLSocket) socket).setEnabledProtocols(new String[]{"TLSv1.1","TLSv1.2"});
        }
        return socket;
    }
}

любая помощь будет высоко оценена

0 ответов

Другие вопросы по тегам