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

Bra*_*ght 9 javascript safari ssl 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
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

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

Bra*_*ght 3

系统管理员摆弄了一个修复程序:将 OpenSSL 设置SSLv3为默认会杀死 Safari,但让它选择自己的 SSL 版本 ( all) 可以正常工作。