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

时间:2015-07-10 10:50:10

标签: node.js web-services security ssl websocket

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

两者都不是很详细,第二个链接上的文章用自签名证书描述了wss。我想知道的是,只要创建自签名证书并部署到我的生产环境就足够了,还是我需要在创建HTTPS服务器时购买证书?

2 个答案:

答案 0 :(得分:53)

您的问题#1

  

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

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

问题

我有一个简单的node.js websocket服务器,由einaros/ws提供支持,通过不安全的连接监听端口80。不得不将其切换为安全连接。

解决方案

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

  • 我需要.pem这个文件,但我从证书提供者那里得到的只是一个简单的.crt / .cert文件,而且我还有一个私人{{} 1}}我在生成初始.key请求后得到了。所以here's how to convertcreditslf):

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

    https

参考

您的问题#2

  

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

强调我的。是的,我会建议您从受信任的机构购买证书。这将确保您的用户无法获得任何浏览器安全警告,或者只是在不知道出现问题的情况下离开。

答案 1 :(得分:2)

要在 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

免费获得一个