如何创建安全的(TLS/SSL) Websocket服务器



我正在使用node.js的WS websocket库。目前我正在运行ws服务器。现在我想通过使用安全连接来保护这个连接,即通过实现wss协议和库支持TLS连接。我搜索了一下,发现这个简单的安全:wss和这个带有自签名证书的wss。

都不是很详细,第二个链接上的文章描述了带有自签名证书的wss。我想知道的是,如果仅仅创建自签名证书并部署到我的生产环境就足够了,或者我是否需要购买证书,因为我们需要在创建HTTPS服务器时购买证书?

你的问题#1

如何创建安全的(TLS/SSL) Websocket服务器?

我在网上搜索如何使websockets在安全连接上工作的指南时发现了你的问题。由于这出现在搜索结果中,我有可能不是唯一一个在这个页面上结束的人。为了节省每个人(包括未来的我)的时间,我开始了。

我有一个简单的node.js websocket服务器,由einaros/ws提供支持,在端口80上监听一个不安全的连接。必须切换到安全连接

的解决方案

基本上,你提供的第二个链接几乎涵盖了我需要知道的一切。以下是我花了一些时间才弄明白的一些事情:

  • 我需要.pem文件,但是我从证书提供商那里得到的只是一个简单的.crt/.cert文件,我也有一个私人的.key,我在生成初始.csr请求后得到。下面是如何转换(credit to slf):

     openssl rsa -in server.key -text > private.pem
     openssl x509 -inform PEM -in server.crt > public.pem
    
  • 我不清楚如何使ws使用安全连接。因为我试图将SSL添加到现有的应用程序中,所以我希望避免重新做一些事情。结果,我所要做的就是将{port:80}参数替换为对https实例的引用(有关如何初始化它的更多信息,请参阅链接)。

     var ws = require('ws').Server;
     var wss = new ws({
         server: httpsServer
     });
    
引用

  • github.com/websockets/ws/blob/master/examples/ssl.js
  • chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js

你的问题#2

我想知道的是,如果仅仅创建自签名证书并部署到我的生产环境就足够了,或者我是否需要购买证书,因为我们需要在创建HTTPS服务器时这样做?

对于公共服务器,您将需要来自广泛信任的CA的证书。使用免费的Let's Encrypt或来自已知发行者的任何付费证书。这将确保您的用户不会收到任何浏览器安全警告,或者甚至不知道哪里出了问题就离开。

对于您的本地开发环境,或者所有连接的客户端都已知并在您的控制之下,您可以创建自己的CA,参见deliciousbrains.com/ssl-certificate-authority-for-local-https-development。

要在nodejs中使用安全web套接字,请使用以下代码示例:

const WebSocket = require("ws").Server;
const HttpsServer = require('https').createServer;
const fs = require("fs");
server = HttpsServer({
    cert: fs.readFileSync(config.ssl_cert_path),
    key: fs.readFileSync(config.ssl_key_path)
})
socket = new WebSocket({
    server: server
});
socket.on(...);
server.listen(config.port);

如果你还没有SSL证书-你可以从letsencrypt.org免费获得一个

相关内容

  • 没有找到相关文章

最新更新