我已经购买了一个证书并安装在我的node.js网站上。但浏览器中的https显示为绿色并且正常。现在,我正在尝试使用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
答案 0 :(得分:3)
我遇到了类似的问题,但我使用的是自签名证书。你提到你买了证书。我是客人,它是由证书颁发机构签署的。
否则,就像我的情况一样,未经验证的证书可能会导致"开放式握手被取消"错误。经验证的证书由第三方(证书颁发机构,即VeriSign)验证或由客户明确授权。
就我而言,VeriSign没有签署我的证书(自签名),因此我必须明确授权。为此,我只需要使用浏览器访问https网址(在您的情况下" https://securedsitedotcom:3003/call")。然后警告未经授权的主机"出现。您需要授权异常,而不是您可以进行WSS连接。
您的服务器可以使用任何端口,它不受443的约束.443是https的默认端口,但任何端口都可以像您一样明确指定。
我希望它有所帮助。
答案 1 :(得分:2)
Chrome最近的工作表明,如果某个网页在Chrome上作为https提供,则网页框必须使用wss。如果必须使用wss,则必须使用端口443(并且不启动任何其他安全端口,到目前为止我还没有看到任何更改端口的方法),这可能是您的问题,因为您的端口看起来像上面的3003。 / p>
现在我正在尝试让我的IT小组在该服务器上修补/升级Apache,因此可以使用mod_proxy_wstunnel使Apache在443上侦听反向代理并将所有wss流量传递到我的websocket服务器。
希望这有帮助。