使用自签名证书的安全WebSocket

ddrv8njm  于 2022-12-13  发布在  其他
关注(0)|答案(5)|浏览(447)

我想使用安全的Websockets来提高成功率。我不需要加密。
我在使用带有自签名证书的安全Websockets(wss://www.example.com)时会看到警告吗example.com?我在Chrome 10上试过了,没有看到警告,也没有要求我接受证书。它只是工作。
这是chrome中的错误还是预期的行为?我将来可以使用自签名证书吗?
谢谢

sqougxex

sqougxex1#

是的,这是Chrome目前的行为,但我不希望它继续成为未来的政策。在firefox 4中(如果你在about:config中启用了WebSockets),你会得到一个关于证书的警告。要批准证书,你可能还必须在浏览器中输入WebSockets的URL(用https代替wss),并首先在那里批准它(因为来自WebSockets连接的关于自签名证书的警告可能不会给予你批准它的机会)。
我希望所有浏览器都能找到正确的行为,即弹出一个警告对话框,允许自签名证书获得批准。

nmpmafwu

nmpmafwu2#

自签名证书自v19(http://crbug.com/53836)起被Chrome拒绝。如果您尝试连接到使用自签名证书的wss URL,则该请求会自动中止。
要允许使用自签名证书,请使用--ignore-certificate-errors标志启动Chrome,例如:

chromium --user-data-dir=/tmp/whatever --ignore-certificate-errors

据我所知,没有办法让Firefox接受你的wss自签名证书。所以,只要在Firefox中使用ws://进行测试。如果你在https上测试你的web应用,那么你必须切换一个首选项来允许连接到(不安全的)ws:// URL:
1.访问about:config
1.将network.websocket.allowInsecureFromHTTPS设置为true

628mspwn

628mspwn3#

我让它工作如下:
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服务器从Express应用程序创建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的任何host:端口,这里的关键是您使用的是wss://协议
在您的node express web服务器中,您应该会看到一条消息记录到控制台中。
http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/

oxcyiej7

oxcyiej74#

当您使用wscat时,则可以使用-n标志(-n,--no-check:不检查未经授权的证书)

wscat -c "wss://30.90.212.255:8000" -n
7gcisfzg

7gcisfzg5#

我在使用我的自签名证书连接到wss://...时遇到了类似的问题。解决方法是在浏览器中接受证书:
1.在Chrome浏览器中转到相应的https://...站点
1.单击“高级”按钮
1.点击“继续xxx(不安全)”

相关问题