如何创建安全的 (TLS/SSL) Websocket 服务器
How to Create Secure(TLS/SSL) Websocket Server
我正在使用 WS websocket library of node.js. Currently I'm running ws server. Now I want to secure this connection by using secure connections i.e by implementing wss protocol and also library support TLS connection. I searched a little and found this plain to secure: wss and this wss with self signed certificate .
两者都不是很详细,第二篇文章link描述了带有自签名证书的wss。我想知道的是,仅创建自签名证书并部署到我的生产环境是否足够,或者我是否需要像创建 HTTPS 服务器时那样购买证书?
您的问题 #1
How to Create Secure(TLS/SSL) Websocket Server?
我在网上搜索有关如何使 websockets 在安全连接上工作的指南时发现了您的问题。因为它出现在搜索结果中,所以我有可能不是唯一一个出现在这个页面上的人。为了节省大家(包括未来的我)一些时间,这里开始。
问题
我有一个简单的 node.js websocket 服务器,由 einaros/ws 提供支持,通过不安全的连接侦听端口 80。必须将其切换为安全连接。
解决方案
基本上,您提供的第二个 link 几乎涵盖了我需要知道的所有内容。以下是我花了一些时间才弄清楚的几件事:
为此我需要 .pem
文件,但我从证书提供商那里得到的只是一个简单的 .crt
/.cert
文件,而且我还有我在生成初始 .csr
请求后得到的私有 .key
。所以 here's how to convert (credit to slf):
openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem
我不清楚如何让 ws
使用安全连接。因为我试图将 SSL 添加到现有应用程序,所以我想避免必须重新做一些事情。事实证明,我所要做的就是用对 https
实例的引用替换 {port:80}
参数(有关如何初始化它的更多信息,请参阅 links)。
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
What i want to know is if it is enough to just create the self signed certificate and deploy to my production environment, or do I need to buy a certificate as we need to do while creating HTTPS servers?
对于 public 服务器,您将需要来自广泛信任的 CA. Use the free Let's Encrypt 的证书或来自已知发行者的任何付费证书。这将确保您的用户不会收到任何浏览器安全警告,或者在不知道出了什么问题的情况下就离开了。
对于您的本地开发环境,或者所有连接的客户端都是已知的并在您的控制之下,您可以创建自己的 CA,请参阅 deliciousbrains.com/ssl-certificate-authority-for-local-https-development。
要在 nodejs 中使用安全网络套接字,请使用此代码示例:
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
免费获得一个
我正在使用 WS websocket library of node.js. Currently I'm running ws server. Now I want to secure this connection by using secure connections i.e by implementing wss protocol and also library support TLS connection. I searched a little and found this plain to secure: wss and this wss with self signed certificate .
两者都不是很详细,第二篇文章link描述了带有自签名证书的wss。我想知道的是,仅创建自签名证书并部署到我的生产环境是否足够,或者我是否需要像创建 HTTPS 服务器时那样购买证书?
您的问题 #1
How to Create Secure(TLS/SSL) Websocket Server?
我在网上搜索有关如何使 websockets 在安全连接上工作的指南时发现了您的问题。因为它出现在搜索结果中,所以我有可能不是唯一一个出现在这个页面上的人。为了节省大家(包括未来的我)一些时间,这里开始。
问题
我有一个简单的 node.js websocket 服务器,由 einaros/ws 提供支持,通过不安全的连接侦听端口 80。必须将其切换为安全连接。
解决方案
基本上,您提供的第二个 link 几乎涵盖了我需要知道的所有内容。以下是我花了一些时间才弄清楚的几件事:
为此我需要
.pem
文件,但我从证书提供商那里得到的只是一个简单的.crt
/.cert
文件,而且我还有我在生成初始.csr
请求后得到的私有.key
。所以 here's how to convert (credit to slf):openssl rsa -in server.key -text > private.pem openssl x509 -inform PEM -in server.crt > public.pem
我不清楚如何让
ws
使用安全连接。因为我试图将 SSL 添加到现有应用程序,所以我想避免必须重新做一些事情。事实证明,我所要做的就是用对https
实例的引用替换{port:80}
参数(有关如何初始化它的更多信息,请参阅 links)。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
What i want to know is if it is enough to just create the self signed certificate and deploy to my production environment, or do I need to buy a certificate as we need to do while creating HTTPS servers?
对于 public 服务器,您将需要来自广泛信任的 CA. Use the free Let's Encrypt 的证书或来自已知发行者的任何付费证书。这将确保您的用户不会收到任何浏览器安全警告,或者在不知道出了什么问题的情况下就离开了。
对于您的本地开发环境,或者所有连接的客户端都是已知的并在您的控制之下,您可以创建自己的 CA,请参阅 deliciousbrains.com/ssl-certificate-authority-for-local-https-development。
要在 nodejs 中使用安全网络套接字,请使用此代码示例:
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
免费获得一个