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;
}
}
любая помощь будет высоко оценена