如何调试Safari静默无法连接到安全的WebSocket

时间:2010-10-25 11:21:50

标签: javascript ssl safari websocket

执行new WebSocket('ws://server/'); Safari连接正常时,但使用new WebSocket('wss://server/');时它完全失败(返回null个对象)。更糟糕的是,它无声地失败 - 在回溯(自定义Eventlet Web服务器)或Safari中的错误控制台中没有错误。

Chrome可与安全主机和非安全主机配合使用。

我将如何调试或修复此问题?谷歌信息非常缺乏。

这是从运行OpenSSL代替WebSockets服务器并查看会发生什么的一些回溯。首先,这是Chrome的(可以正常工作)调试输出:

Using default temp DH parameters
Using default temp ECDH parameters
ACCEPT
SSL_accept:before/accept initialization
SSL_accept:SSLv3 read client hello A
SSL_accept:SSLv3 write server hello A
SSL_accept:SSLv3 write certificate A
SSL_accept:SSLv3 write key exchange A
SSL_accept:SSLv3 write server done A
SSL_accept:SSLv3 flush data
SSL_accept:SSLv3 read client key exchange A
SSL_accept:SSLv3 read finished A
SSL_accept:unknown state
SSL_accept:SSLv3 write change cipher spec A
SSL_accept:SSLv3 write finished A
SSL_accept:SSLv3 flush data
-----BEGIN SSL SESSION PARAMETERS-----
GIBBERISH HERE
-----END SSL SESSION PARAMETERS-----
Shared ciphers:CIPHERS_HERE
CIPHER is REDACTED
Secure Renegotiation IS supported
GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: live.redacted.com:8443
Origin: http://redacted.com
Sec-WebSocket-Key1: 1 [ B l wA 3 e60   d9[  n0!>8384
Sec-WebSocket-Key2: 2 5  1  7p 17 64 3 9
Cookie: __key=value

这里是Safari的(不起作用):

ACCEPT
SSL_accept:before/accept initialization
SSL_accept:SSLv3 read client hello A
SSL_accept:SSLv3 write server hello A
SSL_accept:SSLv3 write certificate A
SSL_accept:SSLv3 write server done A
SSL_accept:SSLv3 flush data
SSL_accept:failed in SSLv3 read client certificate A
ERROR
shutting down SSL
CONNECTION CLOSED

所以我认为Safari存在我们的证书问题 - 但是在使用常规HTTP时它没有显示。

2 个答案:

答案 0 :(得分:3)

Sysadmin摆弄已经发现了一个修复:默认情况下将OpenSSL设置为SSLv3会导致Safari失败,但让它选择自己的SSL版本(all)可以正常工作。

答案 1 :(得分:1)

我看到这个,这意味着证书有问题(过期,域名不正确等)。尝试从Safari直接连接到WebSockets服务器,即https://wss_server:wss_port/。 Safari应该会给你一个更好的错误信息。

当我在开发wsproxy作为noVNC(HTML5 VNC客户端)的一部分时出现此问题时,我发现我使用的是服务器的IP,但证书已签名为主机名。