我尝试使用 java applet 连接到 wss(安全 Websocket)服务器,但 ssl 握手失败,没有任何有用的日志条目。
如果我连接到 wss://echo.websocket.org,握手工作正常,所以我认为这不是一般的 Java 代码错误。
如果我尝试连接到我自己的服务器,则会发送 HelloDone 位(由 wireshark 验证)但连接以挂断结束并且它不在日志中。通常日志中应该有如下信息:“*** ServerHelloDone”
查看我的“javax.net.debug=sll”的 java 控制台日志 http://pastebin.com/ZuvKww4J 它没有被截断,它只是在那里结束。 几秒钟后,tcp 连接超时消息被添加到日志中。
我使用以下 java 代码示例: https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/example/SSLClientExample.java
但我使用的不是 keystore :
sslContext.init( null, null, null );
对于服务器我有两个不同的测试系统:
- 在端口 443 一个 ha-proxy
- 在 8443 端口有一个隧道。
我尝试用不同的方法来隔离错误。首先,我用 stunnel 强制使用与 echo.websocket.org“SSL_RSA_WITH_RC4_128_SHA”相同的密码,但没有成功。
其次,我检查了 ssl 证书本身是否仍然有效。但是当 Web 浏览器和我的 java applet 的正常 https 连接被服务器接受时(同一服务器。ha-proxy 或 stunnel)此时一切正常。
最佳答案
问题已由 Java-WebSocket 的维护者解决。 大赞
关于java - SSL 握手时缺少 ServerHelloDone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969304/