将Webbit升级到0.4.6以使用新的SSL支持,但立即意识到所有wss://握手都在无声地失败,我没有任何错误可以显示。Chrome只报告没有HTTP代码或任何其他标头的响应"成功"。我检查服务器日志,它甚至没有注册"打开"事件。
这里的问题是,任何ws://连接都非常有效。那么,可能会出现什么问题,我如何才能从中得到错误呢?可能是java密钥库和SSL握手出了问题吗?
编辑
我能够找到一个用于测试握手的openSSL命令。这是输出:
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:error in SSLv2/v3 read server hello A
编辑2
我意识到我可以调试这个进一步的
CONNECTED(0000016C)
SSL_connect:before/connect initialization
write to 0x1f57750 [0x1f6a730] (210 bytes => 210 (0xD2))
0000 - 16 03 01 00 cd 01 00 00-c9 03 01 4f 6b 8d 68 63 ...........Ok.hc
0010 - 99 06 08 30 93 2a 42 88-f8 f1 c4 c5 dc 89 71 0b ...0.*B.......q.
0020 - b6 04 42 4e 11 79 b4 76-6c f7 66 00 00 5c c0 14 ..BN.y.vl.f....
0030 - c0 0a 00 39 00 38 00 88-00 87 c0 0f c0 05 00 35 ...9.8.........5
0040 - 00 84 c0 12 c0 08 00 16-00 13 c0 0d c0 03 00 0a ................
0050 - c0 13 c0 09 00 33 00 32-00 9a 00 99 00 45 00 44 .....3.2.....E.D
0060 - c0 0e c0 04 00 2f 00 96-00 41 00 07 c0 11 c0 07 ...../...A......
0070 - c0 0c c0 02 00 05 00 04-00 15 00 12 00 09 00 14 ................
0080 - 00 11 00 08 00 06 00 03-00 ff 01 00 00 44 00 0b .............D..
0090 - 00 04 03 00 01 02 00 0a-00 34 00 32 00 01 00 02 .........4.2....
00a0 - 00 03 00 04 00 05 00 06-00 07 00 08 00 09 00 0a ................
00b0 - 00 0b 00 0c 00 0d 00 0e-00 0f 00 10 00 11 00 12 ................
00c0 - 00 13 00 14 00 15 00 16-00 17 00 18 00 19 00 23 ...............#
00d2 - <SPACES/NULS>
SSL_connect:SSLv2/v3 write client hello A
read from 0x1f57750 [0x1f6fc90] (7 bytes => 0 (0x0))
12488:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:.ssls23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 210 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
编辑3
好的,我已经把问题解决在Webbit初始化上了,但它没有抛出任何错误,所以我可以使用一些输入来让getResourceAsStream
正常工作。以下是服务器的初始化方式:
def startWebSocketServer(webSocketHandler:PartialFunction[WebSocketEvent, Unit]) {
val webServer = WebServers.createWebServer(port)
try {
webServer.setupSsl(getClass.getResourceAsStream("/keystore"), "webbit")
webServer.add("/", new WebSocketEventAdapter(webSocketHandler))
webServer.start
} catch {
case e => e.printStackTrace()
}
}
不幸的是,setupSsl
不会输出任何信息,我已经尝试了我认为的路径和插入假路径。无论哪种情况,我都不会出错。我究竟该如何正确定位路径?谢谢
OMFG答案
在命运的歇斯底里的转折中,我发现了这个问题。这个特殊的问题占用了我48小时的时间,但原因甚至与代码无关,还有一个有趣的沟通错误。
事实证明,另一位开发人员将我们的websocket代码复制到了他正在开发的一个新文件中。一直以来,我们都在尝试调试一个甚至在运行时都没有执行的文件中的代码。因此,经过进一步的调查,我们滚动到一个非常长的不同文件的底部,找到了webbit init代码,并完美地执行了它。
这个故事的寓意是:不要把一个不完整的文件提交给master分支,并把每个人都指向那里进行调试;)