【发布时间】:2020-05-31 03:14:50
【问题描述】:
我正在尝试通过 TLS 设置 WebSocket。
为此,我将按照下一本书第 81 页的说明进行操作。
我按照书中所说的设置服务器代码。 一切都很好,但是证书有一些问题。
根据这本书,我应该采取四个步骤来设置证书
1. Generate a 2048 bit key.
openssl genrsa -des -passout pass:x -out server.pass.key 2048
2. Generate a passphrase free key.
openssl rsa -passin pass:x -in server.pass.key -out server.key
3. Generate csr from the private key.
openssl req -new -key server.key -out server.csr
4. Generate the certificate
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
当我运行第 1 步时出现错误
"UI_set_result:result too small .."
修复是here。
他基本上说要运行以下片段而不是第 1 步。
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
看起来他正在跳过 .pass 部分。为此采取第 2 步。所以我不确定在修复之后我是否应该采取这一步。
我运行这四个步骤,然后在 server.js 中我有:
var connection={
ssl:true,
port:port_number_here,
ssl_key:'server.key',
ssl_cert:'server.crt'
}
//..
var processRequest=function(req,res){
res.writeHead(200);
res.end("Hi!\n");
//console.log('connecting');
};
var app=null;
app = httpsServ.createServer({
key: fs.readFileSync(connection.ssl_key),
cert:fs.readFileSync(connection.ssl_cert)
},processRequest).listen(connection.port);
var wss = new WebSocketServer({server:app});
var clients=[];
var client_number=0;
wss.on('connection', function(cclient_socket){
console.log('Estabished Connection with client.');
}
然后我启动服务器:
node server.js
但是当我通过 Firefox 运行客户端代码时出现错误:
Firefox can’t establish a connection to the server at wss://somedomain:someportnumber/.
在 Chromium 中我得到错误:
(index):9 WebSocket connection to 'wss://thedomain.org:theportnumber/'
failed: Error in connection establishment: net::ERR_CERT_AUTHORITY_INVALID
我不确定如何从这里开始。 我猜我不知何故没有正确制作证书,但这个错误并没有给我太多的工作。
任何帮助将不胜感激。
附言我尝试执行以下指示,但无济于事。
https://stackoverflow.com/a/41366949/322537
另外,我怀疑 Chromium 错误“ERR_CERT_AUTHORITY_INVALID”在这里很关键。我用谷歌搜索并发现 https://www.guildcafe.com/fix-net-err_cert_authority_invalid-error.html 它与证书颁发机构有关。这就是我。我仍然被困,因为我不知道如何解决它。
【问题讨论】:
-
我对连接对象的猜测 ssl 密钥和 ssl 证书应该从文件系统加载,例如 fs.readFileSynch
-
我就是这样,我更新了问题。
-
从这里我只看到了一个安全的http服务器,但是我没有看到websocket组件,你假设将它绑定到http服务器
-
我添加了 wss 部分,你说的是这个吗?
标签: node.js ssl websocket ssl-certificate