带有stunnel的php websocket重定向
Posted
技术标签:
【中文标题】带有stunnel的php websocket重定向【英文标题】:php websocket redirect with stunnel 【发布时间】:2014-09-15 13:26:09 【问题描述】:我构建了一个 php websocket 服务器 javascript 客户端来连接它。没有 SSL 就可以正常工作。我的下一步是使用 wss 而不是 ws(在网站上启用 https)来提高安全性。
我的目的是在 CentOS 6 上使用 stunnel 解密传入流量并将其重定向到 websocketserver。
第一步是简单地将请求从客户端重定向到服务器:
客户端请求:ws://soundjack.eu:9030/wsServer2.php
服务器:在 144.76.81.210:9090
运行 php -q wsServer2.php
上创建的侦听套接字
对应的stunnel配置:
; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/run/stunnel/
;setuid = nobody
;setgid = nobody
; PID is created inside the chroot jail
pid = /stunnel.pid
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
;compression = zlib
; Some debugging stuff useful for troubleshooting
debug = 7
output = /var/log/stunnel/stunnel.log
; Use it for client mode
client = yes
; Service-level configuration
[wsServer]
accept = 127.0.0.1:9030
connect = 127.0.0.1:9090
stunnel 启动正确,正在监听 9030 端口。
客户端发送的每个请求都会中止(检查萤火虫控制台)。在 Chrome 上,它显示状态:已完成,没有任何进一步的信息。
我完全不知道错误是什么,所以任何帮助都会很棒。谢谢!
【问题讨论】:
如果需要任何进一步的信息,我当然会添加它 【参考方案1】:终于成功了!!!即使使用 SSL,它也能很好地工作。
线索是让 stunnel 的配置正常工作(现在使用 SSL 更新):
/etc/stunnel/stunnel.conf:
; Certificate/key is needed in server mode and optional in client mode
cert = /path/to/<myCert>.pem
key = /path/to/<myKey>.key
; Protocol version (all, SSLv2, SSLv3, TLSv1)
sslVersion = all
; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/run/stunnel/
; PID is created inside the chroot jail
pid = /stunnel.pid
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
;compression = zlib
; Some debugging stuff useful for troubleshooting
debug = 7
output = /var/log/stunnel/stunnel.log
;foreground = yes
; Use it for client mode
;client = yes !! turn to server mode
; Service-level configuration
[wsServer]
accept = 0.0.0.0:9030 !! listen to all addresses
connect = 127.0.0.1:9090
注意:用 !! 标记没有有效的 cmets!我插入它们只是为了显示更改。
【讨论】:
我自己试过这个,但它一直在用这个完全没有意义的错误来唠叨我。 [失败:/etc/stunnel/stunnel.conf] 你应该检查你是否在你的配置文件中指定了pid= 虽然已经 7 岁了,但仍在工作。【参考方案2】:我刚刚遇到了同样的问题,我想为其他人在谷歌上搜索添加到这个答案,因为它正在杀死我。在我的 php 中,我使用棘轮编写了一个 websocket,我使用 laravel artisan 命令调用它。如果您在本地开发,我相信您可以将 stunnel.pem 和 CAFile 添加到您的钥匙串中(如果在 Mac 上......再想一想,如果在本地工作,我什至认为您不一定需要 CAFile)并且您应该能够通过 wss 使用 stunnel 访问您的 websocket。但是,如果您正在使用实时网络服务器,则需要对您的密钥进行认证。就我而言,我使用 openSSL 为 stunnel.pem 生成了我的 stunnel 密钥,并使用正 SSL 对它们进行了认证。然后我添加了 CAFile 选项并链接了他们发给我的 crt 文件。如果您获得“stunnel vision”,请在您的 stunnel.conf 中使用选项 foreground =yes 并记住 DrakeBlack 指出的请勿使用客户端 = yes。在这种情况下,您不是客户端,而是服务器。
【讨论】:
以上是关于带有stunnel的php websocket重定向的主要内容,如果未能解决你的问题,请参考以下文章
Rails5 + ActionCable:与'ws:// {hostname} / cable'的WebSocket连接失败:WebSocket在建立连接之前关闭