WebSocket con SSL


115

È possibile avere WebSocket con HTTPS?

Quando si passa a HTTPS, il mio WebSocket restituisce un errore di sicurezza e funziona perfettamente con il normale HTTP.

Di seguito, uno snippet;

socket = new WebSocket("ws://my_www:1235"); 

male, mi sono reso conto che il server socket AIR che sto utilizzando non è sicuro, devo riscrivere per usare flash.net.SecureSocket ...
Eric

Risposte:


170

La connessione WebSocket inizia la sua vita con un handshake HTTP o HTTPS. Quando si accede alla pagina tramite HTTP, è possibile utilizzare WS o WSS (WebSocket secure: WS over TLS). Tuttavia, quando la tua pagina viene caricata tramite HTTPS, puoi utilizzare solo WSS: i browser non consentono il "downgrade" della sicurezza.


è quello che ho ma mi sono reso conto che il server socket AIR che sto usando non è sicuro, devo riscrivere per usare flash.net.SecureSocket ...
Eric

Anche Flash ha i suoi seri problemi ... Stai costruendo un server WebSocket (se sì, perché) o stai costruendo un'app?
Peter Moskovits

1
Ho un server socket AIR in esecuzione sì.
Eric

Quindi come selezionare WSS se la pagina non è caricata con HTTP?
anatoly techtonik

29

Non è possibile utilizzare WebSocket su HTTPS, ma è possibile utilizzare WebSocket su TLS (HTTPS è HTTP su TLS). Usa semplicemente "wss: //" nell'URI.

Credo che la versione recente di Firefox non ti consenta di utilizzare WebSocket non TLS da una pagina HTTPS, ma il contrario non dovrebbe essere un problema.


Allora, qual è la soluzione? Ho un server WS in esecuzione su http ora ho acquistato un SSL e il browser non mi consente più di connettermi con WS. Ho trasformato WS in WSS: // e ora non si connette a WebSocket
muaaz

@muaaz il tuo server WebSocket dovrebbe essere in esecuzione in modalità WSS e preferibilmente caricato con lo stesso certificato / chiavi SSL del tuo server web che serve le tue pagine web di origine che stanno tentando di connettersi al server websocket.
kanaka

4
Grazie. a proposito, l'ho appena risolto inviando tramite proxy (usando apache) la richiesta da wss://a ws://. Quindi, uso wss://ws.domain.come apache applico il proxy su di esso e reindirizzo la richiesta in cui è in esecuzione il server WS. ad esempio: ws://10.12.23.45:5641/server.php. e so che è una pessima soluzione, anche se per me funziona. Apprezzerei il tuo aiuto se mi guidassi attraverso la configurazione di Apache. es: dove mettere l' .certecc. grazie!
muaaz

@muaaz mi dispiace, non conosco la configurazione di Apache oltre a cercarla su Google.
kanaka

21

1 avvertenza aggiuntiva (oltre alla risposta di kanaka / peter): se usi WSS e il certificato del server non è accettabile per il browser, potresti non ottenere alcuna finestra di dialogo renderizzata dal browser (come accade per le pagine Web). Questo perché WebSocket è trattato come una cosiddetta "sottorisorsa", e il certificato accetta / eccezione di sicurezza / qualsiasi finestra di dialogo non viene riprodotta per le sottorisorse.


Anche se è lo stesso certificato di quello utilizzato per HTTPS?
vekah

1
Cosa intendi per "finestra di dialogo renderizzata nel browser"? Come alert()?
Ivan Perevezentsev

2
Finestre di dialogo originate in modo nativo all'interno del browser (non una pagina). Come "questo certificato non è valido, vuoi continuare?"
oberstet

quindi c'è un modo per superare questo? se utilizzo un certificato autofirmato, posso comunque utilizzare websocket?
OhadR
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.