WebSocket TLS证书设置很有趣

时间:2020-02-15 17:27:48

标签: node.js ssl websocket ssl-certificate

我正在尝试通过TLS设置WebSocket。

为此,我将按照下一本书第81页的指示进行操作。

https://www.amazon.com/WebSocket-Client-Server-Communications-Andrew-Lombardi/dp/1449369278/ref=sr_1_1?keywords=websocket&qid=1581782142&sr=8-1

我按照书中所述设置服务器代码。 那里一切都很好,但是证书存在一些问题。

根据这本书,我应该采取四个步骤来设置证书

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 它与证书颁发机构有关。就是我我仍然受困,因为我不知道如何解决它。

2 个答案:

答案 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证书。