我想使用安全的Websockets来提高成功率。 我不需要加密。
在使用带有自签名证书的安全Websockets(wss://example.com)时,我是否会看到警告? 我尝试使用Chrome 10,我没有看到警告,也没有要求我接受证书。它只是有效。
这是Chrome中的错误还是预期的行为? 我将来能否使用自签名证书?
由于
答案 0 :(得分:19)
是的,这是Chrome目前的行为,但我不认为它将来会继续成为这项政策。在firefox 4中(如果在about:config中启用WebSockets),您将收到有关证书的警告。要批准证书,您可能还必须在浏览器中输入WebSockets URL(用https代替wss)并首先批准它(因为WebSockets连接中有关自签名证书的警告可能不会给您批准它的机会)。
我希望所有浏览器都能收集正确的行为,即抛出一个允许自签名证书被批准的警告对话框。
答案 1 :(得分:14)
自第19版(http://crbug.com/53836)以来,Chrome拒绝自签名证书。如果您尝试连接到使用自签名证书的wss URL,则会以静默方式中止请求
要允许使用自签名证书,请使用--ignore-certificate-errors
标记启动Chrome,例如:
chromium --user-data-dir=/tmp/whatever --ignore-certificate-errors
据我所知,没有办法让Firefox接受你的wss自签名证书。因此,只需使用ws://
在Firefox中进行测试即可。如果您通过https测试自己的网络应用,那么您必须切换首选项以允许连接到(不安全的)ws://
网址:
about:config
network.websocket.allowInsecureFromHTTPS
设为true
答案 2 :(得分:12)
我按照以下方式开始工作:
https://github.com/einaros/ws/blob/master/test/WebSocketServer.test.js#L514
首先生成自签名证书:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes
然后使用节点的内置https服务器从快速应用创建您的httpsServer:
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);
然后设置你的websocket服务器(具有讽刺意味的是,这将使用与http服务器相同的端口,我不知道这个,但我想协议可以共享端口? - 这让我有一段时间了。)
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({
server: httpsServer
});
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
现在浏览到https://0.0.0.0:8443
服务器并接受Chrome中的自签名证书。然后,websockets现在应该工作在浏览器旁边。
打开chrome devtools控制台并输入:
var ws = new WebSocket('wss://0.0.0.0:8443');
ws.send('foo');
....或者您用于httpsServer的任何主机:端口,此处的关键是您使用wss://
协议
在节点快速Web服务器中,您应该看到一条消息记录到控制台。使用node ./server.js
http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/
答案 3 :(得分:0)
使用wscat
时,可以使用-n标志(-n,--no-check:不要检查未经授权的证书)
wscat -c "wss://30.90.212.255:8000" -n