wss上的WebSocket连接失败

我已经购买了一个证书,并安装在我的node.js网站。但在浏览器的HTTPS显示绿色,是OK.Now,我试图build立一个套接字连接使用WSS,但它失败了。 在Javascript客户端的错误是这样的。

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 

Chrome最近的工作表明,如果一个页面在Chrome上作为https服务,那么websockets必须使用wss。 如果必须使用wss,则必须使用端口443(并且不启动任何其他安全端口,到目前为止我还没有看到任何方法来更改端口),这可能是您的问题,因为您的端口看起来像上面的3003。

现在我试图让我的IT小组在服务器上修补/升级Apache,所以mod_proxy_wstunnel可以用来让Apache在443上侦听一个反向代理,并将所有的wssstream量传递给我的websocket服务器。

希望这可以帮助。

我碰到类似的问题,但是我正在使用自签名证书。 你提到你买了一张证书 我客人是由证书颁发机构签署的。

否则,在我的情况下,未经validation的证书可能导致“开放握手被取消”错误。 validation的证书由第三方(证书颁发机构,即VeriSign)validation或由客户明确授权。

在我的情况下,威瑞信没有签署我的证书(自签名),所以我不得不明确授权。 为此,我只需要使用浏览器访问https URL(在你的情况下“ https:// securedsitedotcom:3003 / call ”)。 然后出现“警告未授权的主机”。 您需要授权该例外,并且您可以使您的WSS连接。

您的服务器可以使用任何端口,但不绑定到443. 443是https的默认端口,但任何端口都可以像您所做的那样明确指定。

我希望它可以帮助别人。