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

自签名证书搭建的WSS服务连接超时最终失败问题求助

排查步骤


1. 修复服务端代码的模块引入错误

你的服务端代码存在明显的模块引入错误:

// 错误写法
const https = require("tls")
// 正确写法,创建HTTPS服务需要引入https模块而非tls模块
const https = require("https")

tls是Node.js的底层加密通信模块,无法直接用来创建对外提供HTTP服务的HTTPS服务,这里写错会直接导致服务端TLS握手逻辑异常,是连接失败的核心原因之一。

2. 补全WebSocket连接处理逻辑

你当前只初始化了WebSocket服务实例,没有注册连接请求的处理事件,客户端发起WebSocket握手后服务端不会给出响应,会直接导致连接超时:

const webSocket = new Socket({ httpServer: server })
// 新增以下请求处理逻辑
webSocket.on('request', (request) => {
    // 接受客户端的连接请求
    const connection = request.accept(null, request.origin)
    // 可选:后续绑定message、close等事件处理业务逻辑
})

3. 处理自签名证书的信任问题

  • 浏览器默认拦截自签名证书的TLS请求,你需要先在客户端浏览器地址栏直接访问 https://<你的公网IP>:3000,手动点击信任该不安全证书后,再打开WebSocket客户端页面发起连接,否则浏览器会直接拦截wss的握手请求。
  • 生成自签名证书时必须在*主体备用名称(SAN)*字段中填写你使用的公网IP,新版浏览器不再认可仅通用名(CN)匹配的证书,缺少SAN字段的证书会被判定为无效。

4. 排查端口连通性问题

  • 确认云服务商安全组、服务器内部防火墙(ufw/firewalld/iptables)都放开了3000端口的TCP入站访问权限。
  • 先在服务器本地执行 curl -v https://127.0.0.1:3000 确认服务正常启动,再在客户端电脑执行 telnet <你的公网IP> 3000 确认端口可以正常连通。

5. 验证证书有效性

  • 确认服务运行进程有读取 /home/WebRTC/ssl/webrtc.crt 和 /home/WebRTC/ssl/webrtc.key 两个文件的权限,路径无拼写错误。
  • 确认证书和密钥是匹配的一对,可使用openssl命令校验:openssl x509 -noout -modulus -in webrtc.crt | openssl md5 和 openssl rsa -noout -modulus -in webrtc.key | openssl md5,两个命令输出的哈希值一致则匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:45:01