var privateKey = fs.readFileSync('sslcert/key.pem', 'utf8');
var certificate = fs.readFileSync('sslcert/cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();
//... bunch of other express stuff here ...
//pass in your express app and credentials to create an https server
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(8443);
5条答案
按热度按时间sqougxex1#
是的,这是Chrome目前的行为,但我不希望它继续成为未来的政策。在firefox 4中(如果你在about:config中启用了WebSockets),你会得到一个关于证书的警告。要批准证书,你可能还必须在浏览器中输入WebSockets的URL(用https代替wss),并首先在那里批准它(因为来自WebSockets连接的关于自签名证书的警告可能不会给予你批准它的机会)。
我希望所有浏览器都能找到正确的行为,即弹出一个警告对话框,允许自签名证书获得批准。
nmpmafwu2#
自签名证书自v19(http://crbug.com/53836)起被Chrome拒绝。如果您尝试连接到使用自签名证书的wss URL,则该请求会自动中止。
要允许使用自签名证书,请使用
--ignore-certificate-errors
标志启动Chrome,例如:据我所知,没有办法让Firefox接受你的wss自签名证书。所以,只要在Firefox中使用
ws://
进行测试。如果你在https上测试你的web应用,那么你必须切换一个首选项来允许连接到(不安全的)ws://
URL:1.访问
about:config
1.将
network.websocket.allowInsecureFromHTTPS
设置为true
628mspwn3#
我让它工作如下:
https://github.com/einaros/ws/blob/master/test/WebSocketServer.test.js#L514
首先生成自签名证书:
然后使用节点的内置https服务器从Express应用程序创建httpsServer:
然后设置你的WebSocket服务器(讽刺的是,这将使用与http服务器相同的端口,我不知道这一点,但我猜协议可以共享端口?--这让我有一段时间)。
现在浏览到
https://0.0.0.0:8443
服务器并在Chrome中接受自签名证书。然后websockets现在应该可以在浏览器中工作了。打开chrome devtools控制台并键入:
....或您用于httpsServer的任何host:端口,这里的关键是您使用的是
wss://
协议在您的node express web服务器中,您应该会看到一条消息记录到控制台中。
http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/
oxcyiej74#
当您使用
wscat
时,则可以使用-n标志(-n,--no-check:不检查未经授权的证书)7gcisfzg5#
我在使用我的自签名证书连接到
wss://...
时遇到了类似的问题。解决方法是在浏览器中接受证书:1.在Chrome浏览器中转到相应的
https://...
站点1.单击“高级”按钮
1.点击“继续xxx(不安全)”