2012-07-18 15 views
6

Ho un'applicazione WebSocket non sicura funzionante. Ma il mio sito web utilizza https e ho bisogno di una connessione Secure WebSocket per evitare che Firefox si lamenti del fatto che la connessione non è sicura.Secure WebSocket (wss: //) non funziona su Firefox

Sto usando php-websocket-server per il mio server WebSocket con PhP 5.2.9, quindi quando uso WebSocket sicuro non posso decrittografare i pacchetti con la funzione openssl_decrypt.

Ecco perché ho usato stunnel al fine di decifrare i pacchetti inviati dal cliente utilizzando WSS, per farlo ho binded WebSocket cliente ad 12345 porta di un server WebSocket a 54321 porto, poi ho aggiunto uno stunnel in modalità server:

[wsServer] 
accept = 12345 
connect = 192.168.1.227:54321 

Con questa configurazione la mia applicazione funziona bene su Chrome tramite https + WSS. Ma su Firefox c'è un problema durante l'handshake, sembra che nell'intestazione manchino Sec-WebSocket-Version e Sec-WebSocket-Key. Non capisco perché funziona su Firefox tramite http + ws.

Grazie in anticipo per il vostro aiuto.

Modifica: ho aggiunto un'eccezione per il certificato sulla porta 12345, ora la stretta di mano sta andando bene perché penso che Firefox ora abbia lo Sec-WebSocket-Key.

Qui la richiesta di intestazione lavorare con Firefox (più grande di richiesta Chrome):

GET/HTTP/1.1 
Host: 192.168.1.227:12345 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8 
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Connection: keep-alive, Upgrade 
Sec-WebSocket-Version: 13 
Origin: https://192.168.1.227 
Sec-WebSocket-Protocol: HyBi-00 
Sec-WebSocket-Key: 65nHN33M6drIPjQHcGK8pA== 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade: websocket 
+0

Se si riesce a mostrare le intestazioni effettive/strette di mano in entrambe le direzioni per la lavorazione e il caso non lavoro mi può probabilmente identificare rapidamente quale sia il problema. – kanaka

risposta

8

Se si lavora in locale con il certificato auto-firmato, è necessario approvarlo in entrambi i server https: // in esecuzione su porta 443 e wss: // in esecuzione sulla porta 12345 qui con Firefox.

Credo che il vostro browser non permette la connessione websocket sicura e che il motivo per cui alcune intestazioni sono mancanti.

+1

Quando ho cercato nella console, la richiesta WebSocket è stata abordata, ho fatto clic con il tasto destro e ho aperto la richiesta in una nuova scheda. L'URL nella nuova scheda era 'https: //192.168.1.227: 12345 /' e Firefox mi ha chiesto di accettare il certificato per la porta 12345. La prima volta che ho provato, Firefox mi ha chiesto di accettare la porta https ma non la porta 12345. – strat

+1

La risposta è giusta ma un po 'poco chiara. Ok ecco qua. Quando provate ad aprire wss, dire usando wss: //mysite.com: 12345, Firefox continuerà a darvi errore finché non aprirete una scheda separata di Firefox e provate a premere URL [https]: //mysite.com: 12345 e conferma l'eccezione di sicurezza (come fai normalmente su Firefox per qualsiasi connessione basata su https). Questo è davvero strano e succede solo in Firefox. –

+0

Grazie !!! La tua risposta mi ha aiutato molto. + 1ed :) –

Problemi correlati