2017-04-05 101 views
0

我無法讓我的websocket通過HTTPS工作。通過https的AWS EC2 websocket ERR_SSL_VERSION_OR_CIPHER_MISMATCH

當我在本地主機上並通過http連接到它(並將node.js服務器更改回http)時,一切正常。

然而,在生產,我無法連接到它通過HTTP由於混合內容問題,當我Node.js的服務器爲https和WebSocket的網址更改爲https我得到以下錯誤:

https://ec2-35-166-XXX-XXX.us-west-2.compute.amazonaws.com:8080/socket.io/?EIO=3&transport=polling&t=Lj0QXtq net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH

顯然,我的AWS EC2實例上的node.js服務器沒有SSL證書,那麼如何讓我的web套接字與在https上運行的站點一起工作呢?

我也嘗試用ws://代替https://,因爲我看到某處提示,但結果與HTTP相同並且被阻止。

這裏是我的node.js代碼來設置插座:

var app = express() 
var https = require("https").createServer(app) 
var io = require("socket.io")(https) 
https.listen(8080, "0.0.0.0") 

這是我如何連接到它的客戶端:

import io from 'socket.io-client/dist/socket.io.min' 
let socket 
let socketURL = 'https://ec2-35-166-XXX-XXX.us-west-2.compute.amazonaws.com:8080' 
... 
socket = io.connect(socketURL) 

爲了努力使這項工作的緣故,我將我的入站安全組設置爲允許來自任何地方的所有流量。所以這不應該是一個問題。我也試圖從任何地方特別允許所有的HTTPS流量。

我也嘗試將https.listen更改爲端口443,並從websocket url中刪除:8080。同樣的錯誤。

我從服務器上獲取絕對沒有響應頭或任何東西(我假設它甚至沒有達到它爲AWS服務器找不到SSL證書的程度),但它使我絕對不知道我該如何調試。

如何從https網站連接到AWS上的websocket?

我是否真的必須爲服務器購買並設置第二個SSL證書?

+0

你試過安全websocket協議wss://? – stdunbar

+0

@stdunbar我只是試過,仍然是同樣的錯誤。 – MLyck

回答

0

顯然它確實需要SSL證書。在購買和設置一個後,https工作得很好。

+0

你最終主辦pem在哪裏?是否有可能在S3或其他不在AWS上的服務器上託管它們? – jdog