ssl - 使用Stunnel将wss连接到wsServer

标签 ssl websocket stunnel

我正在尝试使用 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/

相关文章:

c# - NETCore.App WebSockets CancellationToken

redis - Stunnel 证书验证失败

c# - SslStream 客户端无法完成与 Stunnel 服务器的握手

http - 客户端的 SSL/TLS 证书如何从客户端(浏览器)发送到服务器

java - 如何在 Java 中进行隐形 ssl 握手

Java - 创建网络浏览器

javascript - 通过 WebSockets 传输文本的正确方法是什么?

mongodb - Grails:如何通过 SSL 访问 mongodb

ssl - 如何修复etcd集群 "error "tls : first record does not look like a TLS handshake""

linux - stunnel 和 sshuttle 有什么区别