2012-03-16 150 views
88

使用https可以使用WebSockets嗎?當切換到https,我的WebSocket返回安全性錯誤,並與普通的HTTP工程完美...html5使用SSL的Websocket

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

謝謝

+0

我的壞,我意識到我使用的AIR套接字服務器不安全,我必須重寫使用flash.net.SecureSocket ... – Eric 2012-03-18 00:29:45

回答

131

WebSocket連接從HTTP或HTTPS握手開始。當通過HTTP訪問頁面時,可以使用WS或WSS(WebSocket secure:WS over TLS)。但是,當您的頁面通過HTTPS加載時,您只能使用WSS--瀏覽器不允許「降級」安全性。

+0

這就是我所擁有的,但我意識到我使用的AIR套接字服務器不安全,我必須重寫以使用flash.net.SecureSocket ... – Eric 2012-03-18 00:28:40

+0

Flash有其嚴重的問題,以及...你在建設嗎?一個WebSocket服務器(如果是這樣,爲什麼),還是你正在構建一個應用程序? – 2012-03-19 07:01:25

+0

我有一個運行「是」的AIR套接字服務器。 – Eric 2012-03-19 12:33:33

19

不能使用WebSockets通過HTTPS,但你可以使用WebSockets通過TLS( HTTPS是基於TLS的HTTP)。只需在URI中使用「wss://」即可。

我相信Firefox的最新版本不會讓你從HTTPS頁面使用非TLS WebSockets,但反過來應該不成問題。

+0

那麼,有什麼解決方案?我有一個運行在http上的WS服務器,現在我買了一個SSL,並且瀏覽器不再允許我連接到WS。我把WS轉到WSS://現在它沒有連接到WebSocket – muaaz 2016-01-01 06:30:46

+0

@muaaz你的WebSocket服務器應該在WSS模式下運行,並且最好使用與你的web服務器相同的SSL證書/密鑰加載你正在嘗試的原始網頁連接到websocket服務器。 – kanaka 2016-01-02 05:14:08

+2

謝謝。順便說一句,我剛剛通過代理(使用apache)從'wss://'到'ws://'的請求來解決它。所以,我使用'wss:// ws.domain.com',並且apache在其上應用代理並在WS服務器正在運行的位置重定向請求。例如:'ws://10.12.23.45:5641/server.php'。而且我知道它是一個非常糟糕的解決方案 - 儘管它適用於我。如果你指導我通過Apache配置,我會很感激你的幫助。例如:把'.cert'等放在哪裏謝謝! – muaaz 2016-01-02 10:25:36

17

1個額外的警告(除了由kanaka /彼得回答):如果你使用WSS,服務器證書是不能接受的瀏覽器,你可能不會得到渲染對話框任何瀏覽器(就像它發生的Web頁面)。這是因爲WebSockets被視爲所謂的「子資源」,並且證書接受/安全異常/任何對話不會爲子資源呈現。

+0

即使它與用於HTTPS的證書一樣嗎? – vekah 2015-04-01 17:53:51

+1

「瀏覽器呈現對話框」是什麼意思?像'alert()'? – 2016-05-22 18:58:36

+1

原生在瀏覽器內的對話框(不是頁面)。就像「這個證書無效,你想繼續嗎?」 – oberstet 2016-06-02 20:20:00