Wenn Sie new WebSocket('ws://server/');
Safari ausführen, wird eine Verbindung hergestellt, aber wenn new WebSocket('wss://server/');
verwendet wird, schlägt es vollständig fehl (gibt ein null
-Objekt zurück). Schlimmer noch, es schlägt im Hintergrund fehl - keine Fehler in Traceback (ein benutzerdefinierter Eventlet-Webserver) oder in der Fehlerkonsole in Safari.
Chrome eignet sich sowohl für den sicheren als auch für den nicht sicheren Host.
Wie würde ich das Problem beheben oder beheben? Google hat sehr wenig Informationen.
Hier finden Sie eine Rückverfolgung von OpenSSL anstelle des WebSockets-Servers und sehen, was passiert. Erstens, hier ist die Debug-Ausgabe von Chrome (die funktioniert):
%Vor%und hier ist Safari (was nicht funktioniert):
%Vor%Ich denke also, Safari hat ein Problem mit unseren Zertifikaten - aber eines, das bei Verwendung von normalem HTTP nicht bekannt ist.
Sysadmin fiddling hat einen Fix entdeckt: Wenn OpenSSL standardmäßig auf SSLv3
gesetzt wird, wird Safari beendet, aber die eigene SSL-Version ( all
) zu verwenden, funktioniert einwandfrei.
Wo ich das gesehen habe, heißt das, dass etwas mit dem Zertifikat nicht stimmt (abgelaufene, falsche Domain, usw.). Versuchen Sie, sich direkt von Safari aus mit dem WebSockets-Server zu verbinden, also https://wss_server:wss_port/
. Safari sollte Ihnen auf diese Weise eine bessere Fehlermeldung geben.
Als ich dieses Problem bei der Entwicklung von wsproxy als Teil von noVNC (HTML5 VNC-Client) hatte, stellte sich heraus, dass ich eine IP verwendete für den Server, aber das Zertifikat wurde für einen Hostnamen signiert.
Tags und Links javascript ssl websocket safari