我尝试使用Java小程序连接到wss(安全WebSocket)服务器,但是SSL握手失败,没有任何有用的日志条目。
如果我连接到wss://echo.websocket.org,握手就能成功,所以我认为这不是一般的Java代码错误。
如果我尝试连接到自己的服务器,则会发送HelloDone位(通过wireshark验证),但连接会在挂起中结束,并且不在日志中。通常应该在日志中出现以下消息:“*** ServerHelloDone”
请参阅我的Java控制台日志“javax.net.debug = sll” http://pastebin.com/ZuvKww4J 它不是被截断了,它只是在那里结束。 几秒钟后,TCP连接超时消息会添加到日志中。
我使用以下Java代码示例: https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/example/SSLClientExample.java
但是我使用的是:
sslContext.init( null, null, null );
针对服务器,我有两个不同的测试系统:
- 在端口443上是一个ha-proxy
- 在端口8443上是一个stunnel。
我尝试了不同的方法来隔离错误。首先,我强制使用与echo.websocket.org相同的加密方式“SSL_RSA_WITH_RC4_128_SHA”来使用stunnel,但没有成功。
其次,我检查了ssl证书本身是否仍然有效。但由于通过Web浏览器和我的Java小程序的正常https连接都被服务器(同一台服务器,ha-proxy或stunnel)接受,所以在这一点上一切都可以工作。