0

我构建了一个 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。

客户端发送的每个请求 gehts 中止(检查萤火虫控制台)。在 Chrome 上显示状态:已完成,没有任何进一步的信息。

我完全不知道错误是什么,所以任何帮助都会很棒。谢谢!

4

2 回答 2

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

注意:用 !! 标记 没有有效的评论!我插入它们只是为了显示更改。

于 2014-09-15T16:37:19.590 回答
0

我刚刚遇到了同样的问题,我想为其他人在谷歌上搜索添加这个答案,因为它正在杀死我。在我的 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 指出的不要使用客户端 = 是。在这种情况下,您不是客户端,而是服务器。

于 2015-02-12T16:00:57.003 回答