我正在尝试使用 stunnel 将 wss 连接转换为 ws 连接,因为 wsServer不支持wss。服务器运行的是 Ubuntu,如果重要的话,我使用的客户端是 Chrome。
这是我的 stunnel.conf
文件
foreground = yes
debug = info
output = /var/log/stunnel.log
[wsServer]
cert = /etc/letsencrypt/live/myurl.com/fullchain.pem
key = /etc/letsencrypt/live/myurl.com/privkey.pem
accept = 0.0.0.0:8443
connect = 127.0.0.1:8080
我正在尝试通过 JavaScript 调用连接到它:
const socket = new WebSocket('wss://myurl.com:8433');
但我一直收到连接错误:
(index):13 WebSocket connection to 'wss://myurl.com:8433/' failed: (anonymous) @ (index):13
这是我检查过的内容:
- 我的端口转发/系统防火墙没有占用连接。如果我终止 stunnel 并在端口 8080 或 8433 上设置一个常规套接字监听,我可以从客户端计算机连接到该套接字。
- wsServer 接受非加密流量,如果我改为使用
ws://myurl.com:8080
连接,则可以正常工作 - wsServer 可以很好地接受来自本地主机的连接,我知道当 stunnel 与服务器在同一台计算机上运行时这是必要的
- Chrome 在用于同一域下的 https 页面时接受我的证书,因此我认为我没有证书签名错误,但我不知道如何判断证书是否与连接失败相关<
- Stunnel 启动时不打印任何错误
- 尽管文件是在我将输出字段添加到 .conf 文件后创建的,但
/var/log/stunnel.log
中没有任何内容打印
关于我还可以尝试什么,还有什么想法吗?是否有某种原因适用于 https 的证书不适用于 wss?
人们是否建议通过 apache 使用 ProxyPass 并完全避免使用 stunnel?
最佳答案
不是解决方案,而是下一个故障排除步骤。获取 openssl 并尝试连接到 8443。这应该会返回证书信息,并至少确认 stunnel 正在提供证书。
openssl s_client -connect myurl.com:8443
自从我配置 stunnel 以来已经有一段时间了,但是 IIRC 你不能在你的 key 上设置密码。
关于ssl - 使用Stunnel将wss连接到wsServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72251592/