You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Secure WebSockets无法连接求助:非加密WS可正常工作

解决WSS连接失败但WS正常的问题

以下是针对问题的排查和解决步骤:

1. 替换为完整证书链文件

Certbot生成的cert.pem仅包含域名证书,缺少中间证书链,Node.js的HTTPS服务器需要完整证书链才能被客户端正常信任。将配置中的证书路径改为fullchain.pem:

const options = {
  cert: fs.readFileSync('/etc/letsencrypt/live/mydomain.com/fullchain.pem'),
  key: fs.readFileSync('/etc/letsencrypt/live/mydomain.com/privkey.pem')
};

2. 确保HTTPS服务器监听端口与客户端一致

确认你的HTTPS服务器明确监听33411端口,示例代码需对应修改:

const server = https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('HTTPS Server Running');
});
server.listen(33411); // 绑定客户端连接的33411端口
const wss = new WebSocketServer({ server });

3. 验证证书文件访问权限

Node.js进程需要读取证书文件的权限,执行以下命令调整权限(假设Node进程运行用户为nodeuser):

sudo chown -R nodeuser:nodeuser /etc/letsencrypt/live/mydomain.com/
sudo chmod -R 600 /etc/letsencrypt/live/mydomain.com/

注意:live目录下的文件是符号链接,需确保/etc/letsencrypt/archive/mydomain.com/下的目标文件也有对应权限。

4. 测试HTTPS服务器可用性

先用curl测试HTTPS连接是否正常,排除证书或服务器配置问题:

curl -v https://mydomain.com:33411

若返回证书错误(如unable to get local issuer certificate),说明证书链仍有问题;若连接超时,用netstat -tulpn | grep 33411确认服务器是否在监听该端口。

5. 检查Node.js版本兼容性

旧版本Node.js可能不支持Certbot证书使用的现代TLS协议或加密算法,升级到LTS版本(如18.x或20.x)后重新测试。

6. 排查浏览器证书信任问题

在Chrome中打开chrome://net-internals/#ssl,输入mydomain.com:33411查看详细证书错误;在Firefox中点击地址栏锁图标,检查证书是否被信任、链是否完整。

内容的提问来源于stack exchange,提问作者super15

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:14:50