wss上的WebSocket连接失败

Tha*_*ung 7 javascript websocket node.js

我已经购买了一个证书并安装在我的node.js网站上.但是浏览器中的https显示为绿色并且正常.现在,我正在尝试使用wss建立套接字连接,但它失败了.Javascript客户端的错误是这样的.

   WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:        
   WebSocket opening handshake was canceled
Run Code Online (Sandbox Code Playgroud)

请帮忙!

客户端代码(Javascript)

var ws = new WebSocket('wss://securedsitedotcom:3003/call');
Run Code Online (Sandbox Code Playgroud)

服务器端的代码(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'
 });
Run Code Online (Sandbox Code Playgroud)

浏览器控制台出错:

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

WebSocket opening handshake was canceled
Run Code Online (Sandbox Code Playgroud)

小智 6

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

现在,我正试图让我的 IT 团队在该服务器上修补/升级 Apache,因此可以使用 mod_proxy_wstunnel 使 Apache 在 443 上侦听反向代理并将所有 wss 流量传递到我的 websocket 服务器。

希望这可以帮助。


w4r*_*t3r 5

我遇到了类似的问题,但我使用的是自签名证书。您提到您购买了证书。我猜它是由证书颁发机构签名的。

否则,就像我的情况一样,未经验证的证书可能会导致“打开握手被取消”错误。经过验证的证书要么由第三方(证书颁发机构,即 VeriSign)验证,要么由客户端明确授权。

就我而言,VeriSign 没有签署我的证书(自签名),因此我必须明确授权它。为此,我只需使用浏览器访问 https URL(在您的情况下为“ https://securedsitedotcom:3003/call ”)。然后出现“警告未经授权的主机”。您需要授权例外,然后才能建立 WSS 连接。

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

我希望它能帮助某人。

  • 已经有一段时间了,我希望你能修复它。否则,我在回复中是否说过,“打开握手已取消”错误可能是由于您的**浏览器**保护您免受**未经验证的来源**的影响。(也就是说,您的证书**未由 CA(即 verisign)签署**或**未明确授权**)。要使用 chrome 进行授权,请访问 https 服务器并传递警告,或者在设置 => https/ssl => 管理证书 => 从那里自动授权 (2认同)