我无法让我的websocket通过HTTPS工作。
当我在localhost上并通过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证书,那么如何让我的网络套接字与https上运行的网站一起使用?
我也尝试将https://
替换为ws://
,因为我看到某处建议,但结果与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 :(得分:0)
显然它确实需要SSL证书。购买并设置一个后,https完全正常。