2015-09-21 348 views
6

我已經購買了證書並安裝在我的node.js網站上。但瀏覽器中的https顯示爲綠色,並且正常。現在,我試圖使用wss建立套接字連接,但失敗。 在Javascript客戶端的錯誤是這樣的。wss上的WebSocket連接失敗

WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:   
    WebSocket opening handshake was canceled 

請幫忙!

代碼在客戶端(JavaScript)的服務器端

var ws = new WebSocket('wss://securedsitedotcom:3003/call'); 

代碼(node.js的)

https = require('https'); 
var server = https.createServer({ 
    key: fs.readFileSync(config.certKeyPath), 
    cert: fs.readFileSync(config.certCrt), 
    requestCert: true, 
    rejectUnauthorized: false 
},app); 
server.listen(port); 
var wss = new ws.Server({ 
    server: server, 
    path: '/call' 
}); 

錯誤在瀏覽器控制檯:

WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:   

WebSocket opening handshake was canceled 
+1

服務器是否落實端口3003 WSS? –

+0

聽起來像服務器沒有處理連接升級:你能提供更多信息嗎? – pietro909

+0

是的,服務器端口3003 @DavidSchwartz – Thabung

回答

2

與近期工作Chrome透露,如果某個網頁在Chrome上作爲https服務,則Websockets必須使用wss。如果必須使用wss,則必須使用端口443(並且不啓動任何其他安全端口,到目前爲止,我還沒有看到任何方式更改端口),這可能是您的問題,因爲您的端口看起來像上面的3003。

現在我正在試圖讓我的IT小組在該服務器上修補/升級Apache,因此mod_proxy_wstunnel可用於使Apache在443上偵聽反向代理並將所有wss流量傳遞到我的websocket服務器。

希望這會有所幫助。

2

我遇到類似的問題,但我是用簽名的證書一個自我。你提到你買了一張證書。我客人是由證書頒發機構簽署的。

否則,就像在我的情況下,非確認證書會引起「打開握手被取消」的錯誤。經過驗證的證書由第三方(證書頒發機構,即VeriSign)驗證或由客戶明確授權。

在我的情況下,威瑞信沒有簽署我的證書(自簽名),所以我不得不明確授權它。爲此,我只需使用瀏覽器訪問https URL(在您的案例中爲「https://securedsitedotcom:3003/call」)。然後出現「警告未授權的主機」。您需要授權該例外情況,並且您可以進行WSS連接。

您的服務器可以使用任何端口,但不綁定到443. 443是https的默認端口,但任何端口都可以像您所做的那樣明確指定。

我希望它可以幫助別人。

+0

您的服務器可以使用任何端口,這是真的,但我仍然可以訪問。 WebSocket連接到 'WS://maximumroulette.com:10066 /' 失敗:失敗:網頁套接字打開握手被取消 連接接收握手響應 WebSocket連接到 ':://maximumroulette.com 10066/WSS' 關閉之前殺了我.... –

+1

它已經有一段時間了,我希望你修好它。否則,在我的回覆中,我說「開放握手已取消」錯誤可能是由於您的**瀏覽器**保護您免受**未經驗證的源**。(也就是說,您的證書要麼**未由CA簽名**(即verisign),要麼**沒有明確自動簽署**)。要授權使用chrome,請訪問https服務器並通過警告或在設置=> https/ssl =>管理證書=>自動從此處 – w4rt3r

相關問題