Как отладки Safari молча не подключится к безопасному Websocket
-
26-09-2019 - |
Вопрос
При исполнении new WebSocket('ws://server/');
Safari соединяет штраф, но при использовании new WebSocket('wss://server/');
Это полностью не удается (возвращает null
объект). Хуже того, он не работает без ошибок - никаких ошибок в Traceback (пользовательский веб-сервер Eventlet) или в консоли ошибки в Safari.
Chrome работает нормально как с безопасным, так и небезопасным хостом.
Как бы я пошел от отладки или исправления этого? Google очень короткий на информации.
Вот несколько трассировков с запуском OpenSSL на месте сервера WebSockets и увидеть, что произойдет. Во-первых, вот Chrome's (который работает) Debug Exput:
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
И вот сафари (который не работает):
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.
Решение
Sysadmin Hiddling выявил исправление: настроить OpenSSL для SSLv3
По умолчанию убивает Safari, но позволяя ему выбрать свою собственную версию SSL (all
) работает отлично.
Другие советы
Там, где я видел это, это означает, что есть что-то не так с сертификатом (истеклом, неверным доменом и т. Д.). Попробуйте подключиться непосредственно к серверу WebSockets из Safari, т. Е. https://wss_server:wss_port/
. Отказ Safari должен дать вам лучшее сообщение об ошибке.
Когда у меня была эта проблема при разработке WSProxy как часть Novnc. (Клиент HTML5 VNC) Оказалось, я использовал IP для сервера, но сертификат был подписан для имени хоста.