我正在使用node.js的WS websocket库。目前,我正在运行ws服务器。现在,我想通过使用安全连接(即通过实现wss协议(protocol)以及库支持TLS连接)来保护此连接。我搜索了一下,找到了这个plain to secure: wss和这个wss with self signed certificate

两者都不是很详细,第二个链接上的文章介绍了带有自签名证书的wss。我想知道的是,仅创建自签名证书并部署到我的生产环境是否就足够了?还是我需要像创建HTTPS服务器时一样购买证书?

最佳答案

您的问题#1

在网上搜索有关如何使网络套接字在安全连接上工作的指南时,我发现了您的问题。由于这出现在搜索结果中,因此我不是唯一一个最终显示在此页面上的人。为了节省大家(包括将来的我)一些时间,请继续。
问题
我有一个简单的node.js websocket服务器,由einaros/ws驱动,通过不安全的连接监听端口80。不得不将其切换到安全连接。
解决方案
基本上,您提供的第二个链接涵盖了我需要了解的几乎所有内容。但是,以下几件事让我花了一些时间来弄清楚:

  • 为此,我需要.pem文件,但是我从证书提供者那里得到的只是一个简单的.crt/.cert文件,在生成初始.key请求之后,我还拥有一个私有(private)的.csr。所以here's how to convert(creditslf):
     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

    对于公共(public)服务器,您将需要来自广受信任的CA的证书。使用免费的Let's Encrypt或任何已知发行者的付费证书。这将确保您的用户不会收到任何浏览器安全警告,甚至不会知道什么地方出了错就不会离开。
    对于您的本地开发环境,或者在所有已知连接的客户端处于您的控制之下的地方,您可以创建自己的CA,请参阅deliciousbrains.com/ssl-certificate-authority-for-local-https-development

    关于node.js - 如何创建安全的(TLS/SSL)Websocket服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31338927/

    10-12 07:39
    查看更多