2010-10-25 5 views
8

Quando si esegue new WebSocket('ws://server/'); Safari si connette correttamente, ma quando si utilizza new WebSocket('wss://server/'); fallisce completamente (restituisce un oggetto null). Peggio ancora, fallisce silenziosamente - nessun errore nel traceback (un server Web Eventlet personalizzato) o nella console degli errori in Safari.Come eseguire il debug di Safari senza riuscire a connettersi a un WebSocket sicuro

Chrome funziona perfettamente con l'host sicuro e non sicuro.

Come fare per eseguire il debug o risolvere il problema? Google è molto breve sulle informazioni.

Ecco un po 'di traccia da eseguire OpenSSL al posto del server WebSockets e vedere cosa succede. In primo luogo, qui è di Chrome (che funziona) output di debug:

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 

ed ecco di Safari (che non funziona):

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 

Quindi penso che Safari ha un problema con i nostri certificati-ma uno non rivela quando si utilizza il normale HTTP.

risposta

3

Sysadmin ha rivelato una correzione: l'impostazione di OpenSSL su SSLv3 per impostazione predefinita uccide Safari, ma lasciare che scelga la propria versione SSL (all) funzioni correttamente.

+0

Ah sì, quella era un'altra cosa che ricordo di aver affrontato. Tuttavia, sono sorpreso che non riceverai alcun feedback dal tuo server WebSockets in quel caso. – kanaka

+0

Beh, non stava nemmeno ricevendo la richiesta, dato che Safari stava chiudendo la connessione immediatamente dopo l'handshake. Non è mai arrivato al server WebSockets. –

1

Dove ho visto questo, significa che c'è qualcosa di sbagliato nel certificato (scaduto, dominio errato, ecc.). Prova a connetterti direttamente al server WebSockets di Safari, ad esempio https://wss_server:wss_port/. Safari dovrebbe darti un messaggio di errore migliore in questo modo.

Quando ho avuto questo problema durante lo sviluppo di wsproxy come parte di noVNC (client VNC HTML5), risultava che stavo usando un IP per il server ma il certificato è stato firmato per un nome host.

+0

Il certificato va bene, possiamo connetterci in ogni altro modo. Si trattava di un problema di configurazione SSL, come mostrato di seguito. –

Problemi correlati