При выполнении new WebSocket('ws://server/');
Safari подключается нормально, но при использовании new WebSocket('wss://server/');
он полностью завершается ошибкой (возвращает объект null
).Хуже того, он молча завершается сбоем - никаких ошибок при трассировке (пользовательский веб-сервер Eventlet) или в консоли ошибок в 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.