【发布时间】:2010-10-25 11:21:49
【问题描述】:
当new WebSocket('ws://server/'); Safari 连接正常,但是当使用new WebSocket('wss://server/'); 时它完全失败(返回一个null 对象)。更糟糕的是,它会静默失败 - 回溯(自定义 Eventlet Web 服务器)或 Safari 中的错误控制台中没有错误。
Chrome 在安全和非安全主机上都能正常工作。
我将如何调试或修复此问题? Google 的信息非常匮乏。
以下是运行 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 时它不会显示。
【问题讨论】:
标签: javascript ssl safari websocket