2017-04-05 100 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