WebSocket接入SSL证书

发布于:2025-03-24 ⋅ 阅读:(81) ⋅ 点赞:(0)

碎碎念

在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因此,在配置 WebSocket 服务器时,我们也需要确保其支持 HTTPS。

在这种情况下,直接运行 HOST=0.0.0.0 PORT=9000 npx y-websocket 将无法正常工作,因为它不支持 HTTPS。接下来,我们将介绍如何通过创建一个支持 HTTPS 的 WebSocket 服务器来解决这个问题。

解决方法

创建 HTTPS WebSocket 服务器

首先,我们需要创建一个文件 secure-server.js,该文件将用于配置 HTTPS 和 WebSocket 服务器:

const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');
const { setupWSConnection } = require('y-websocket/bin/utils');

const port = process.env.PORT || 9000;
const host = process.env.HOST || '0.0.0.0';
const cert = process.env.SSL_CERT || '/path/to/cert.pem';
const key = process.env.SSL_KEY || '/path/to/key.pem';
// 也可以是 
// const cert = process.env.SSL_CERT || '/path/to/cert.pem';
// const key = process.env.SSL_KEY || '/path/to/cert.key';


const server = https.createServer({
  cert: fs.readFileSync(cert),
  key: fs.readFileSync(key)
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (conn, req) => setupWSConnection(conn, req, { docName: req.url.slice(1).split('?')[0] }));

server.listen(port, host, () => {
  console.log(`https://${host}:${port}`);
});

在上述代码中,我们使用 https 模块创建了一个 HTTPS 服务器,并使用 ws 模块创建了一个 WebSocket 服务器。通过读取 SSL 证书和密钥文件,我们确保了服务器的安全性。

创建系统服务

为了确保我们的 WebSocket 服务器能够在系统启动时自动运行,我们需要创建一个 systemd 服务文件 y-websocket.service

[Unit]
Description=Y-WebSocket Server Service
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/path/to/WorkingDirectory
Environment="HOST=0.0.0.0" "PORT=9000" "SSL_CERT=/path/to/cert.pem" "SSL_KEY=/path/to/key.pem"
; 或者是 Environment="HOST=0.0.0.0" "PORT=9000" "SSL_CERT=/path/to/cert.pem" "SSL_KEY=/path/to/cert.key"
ExecStart=/usr/bin/node /path/to/secure-server.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=y-websocket-server

[Install]
WantedBy=multi-user.target

这个服务文件定义了 WebSocket 服务器的启动和运行方式。通过设置环境变量,我们可以灵活地配置服务器的主机、端口和 SSL 证书路径。

启动服务

最后,我们需要运行以下指令来启动并启用服务:

sudo systemctl daemon-reload
sudo systemctl restart y-websocket.service
sudo systemctl enable y-websocket.service

通过以上步骤,我们创建了一个支持 HTTPS 的 WebSocket 服务器,并确保其在系统启动时自动运行。这不仅提高了服务器的安全性,还简化了服务器的管理和维护。


网站公告

今日签到

点亮在社区的每一天
去签到