我正在使用带有 android v4.4.2 (Java) 和 java_websockets 的物理设备我在尝试连接到 websocket 时收到此错误。
javax.net.ssl.SSLHandshakeException:
javax.net.ssl.SSLProtocolException:
SSL handshake aborted: ssl=0x7aa38588:
Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:
unknown protocol (external/openssl/ssl/s23_clnt.c:769 0x73a81cfc:0x00000000)
我找到了 this answer我尝试实现它但没有任何改变。这就是我获取 NoSSLv3SocketFactory
代码的地方。它进入 try catch 直到最后一行 mWebSocketClient.connect()
但它没有进入 catch,onError
记录错误。
这是 websocket 设置代码。
...
String complete = wsBase + ep;
URI uri = new URI(complete);
mWebSocketClient = new WebSocketClient(uri, new Draft_17())
{
@Override
public void onOpen(ServerHandshake serverHandshake)
{
Log.i("Websocket", "Opened");
}
@Override
public void onMessage(String s)
{
final String message = s;
runOnUiThread(new Runnable()
{
@Override
public void run()
{
Log.i("onMessage", "running");
}
});
}
@Override
public void onClose(int i, String s, boolean b)
{
Log.i("Websocket", "Closed " + s);
}
@Override
public void onError(Exception e)
{
Log.i("Websocket", "Error " + e.getMessage());
}
};
try
{
// Stuff I thought might have fixed it but didn't
SSLContext sslcontext = SSLContext.getInstance("TLSv1");
sslcontext.init(null,
null,
null);
SSLSocketFactory noSSLv3Factory = new NoSSLv3SocketFactory(sslcontext.getSocketFactory());
Socket socket = noSSLv3Factory.createSocket(uri.getHost(), 80);
mWebSocketClient.setSocket(socket);
mWebSocketClient.connect();
}
catch (Exception e)
{
Log.i("Websocket", e.getMessage());
}
最佳答案
Socket socket = noSSLv3Factory.createSocket(uri.getHost(), 80);
如果我正确理解了您的代码,那么您正在尝试连接到端口 80 上的安全 WebSocket。虽然理论上有人可以像这样设置服务器,但这种可能性很小。端口 80 用于 http 而不是 https,因此用于 ws://
而不是 wss://。安全 Websockets (
wss://`) 通常在端口 443 上进行处理,其中 https 也已完成。
关于java - SSL Handshake Excetion : Failure in SSL library, 通常是协议(protocol)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275309/