2010-10-25 10 views
8

Al hacer new WebSocket('ws://server/');, Safari se conecta correctamente, pero cuando usa new WebSocket('wss://server/');, falla completamente (devuelve un objeto null). Peor aún, falla silenciosamente, no hay errores en la recuperación (un servidor web personalizado de Eventlet) o en la consola de errores dentro de Safari.Cómo depurar Safari silenciosamente al no poder conectarse a un WebSocket seguro

Chrome funciona bien con el host seguro y no seguro.

¿Qué debo hacer para depurar o corregir esto? Google tiene muy poca información.

A continuación se muestra un rastreo desde la ejecución de OpenSSL en lugar del servidor WebSockets y viendo lo que sucede. En primer lugar, aquí es de Chrome (que funciona) la salida de depuración:

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 

y aquí está de Safari (que no funciona):

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 

Así que creo que Safari tiene un problema con nuestros certificados-pero uno no se revela cuando se usa HTTP regular.

Respuesta

3

Sysadmin violín ha revelado una solución: establecer OpenSSL en SSLv3 por defecto mata a Safari, pero dejar que elija su propia versión SSL (all) funciona bien.

+0

Ah sí, esa fue otra de las cosas que recuerdo haber tratado. Sin embargo, me sorprende que no esté recibiendo ningún comentario de su servidor WebSockets en ese caso. – kanaka

+0

Bueno, ni siquiera estaba recibiendo la solicitud, ya que Safari estaba cerrando la conexión inmediatamente después del apretón de manos. Nunca llegó al servidor WebSockets. –

1

Donde he visto esto, significa que hay algo mal con el certificado (dominio vencido, incorrecto, etc.). Intente conectarse directamente al servidor WebSockets desde Safari, es decir, https://wss_server:wss_port/. Safari debería darle un mejor mensaje de error de esa manera.

Cuando tuve este problema al desarrollar wsproxy como parte de noVNC (cliente HTML5 VNC) resultó que estaba usando una IP para el servidor pero el certificado se firmó para un nombre de host.

+0

El certificado está bien, podemos conectarnos de todas las formas. Era un problema de configuración SSL, como se muestra a continuación. –

Cuestiones relacionadas