我正在尝试通过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
我不确定如何从这里继续。 我想我可能不正确地制作了证书,但是错误并没有给我太多帮助。
任何帮助将不胜感激。
p.s。我尝试实施以下指示,但无济于事。
https://stackoverflow.com/a/41366949/322537
我还怀疑Chromium错误“ ERR_CERT_AUTHORITY_INVALID”在这里很关键。我用谷歌搜索发现 https://www.guildcafe.com/fix-net-err_cert_authority_invalid-error.html 它与证书颁发机构有关。就是我我仍然受困,因为我不知道如何解决它。
答案 0 :(得分:1)
在我看来,您使用的是自签名服务器证书。您必须告诉客户端(您的Chromium实例)信任该密钥,然后该密钥才能使用WebSocket连接到您正在开发的服务器。您可以说服您的浏览器接受不正确签名的https网页连接,而不接受websocket连接。
在Chromium的情况下,您实际上需要告诉计算机的OS(不是服务器计算机,而是运行Chromium的计算机)。请在您的操作系统上查找这些说明。您正在查找“ Ubuntu上的Chrome中的信任自签名证书”或“ .MacOS上的..”或“ ... Windows上的...”或其他任何内容。
Firefox为此具有自己的UI。您也可以阅读有关内容。对于您来说,这可能是一条更快的成功之路。
然后使用“让我们加密”,您可以免费制作受信任的证书。有关教程,请查看。 https://itnext.io/node-express-letsencrypt-generate-a-free-ssl-certificate-and-run-an-https-server-in-5-minutes-a730fbe528ca
我们玩得开心吗?是吗是吗?
答案 1 :(得分:0)
解决方案是不按照书中所述创建证书,而仅引用已为给定网站创建的ssl证书。