我有一个工作的websockets解决方案,包括他们push integration documentation中记录的Ratchet和ZeroMQ。我遇到的问题是生产应用程序是通过SSL提供的,当通过安全网站请求时,不安全的websockets在Firefox中不起作用。这个问题是众所周知的,有两个建议是使用stunnel,或者使用nginx作为web服务器。我不能使用nginx所以我唯一的选择是stunnel,但是客户端无法连接。
这是我的stunnel配置:
client = no
chroot = /var/lib/stunnel/
setuid = stunnel
setgid = nogroup
pid = /var/run/stunnel.pid
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
cert = /etc/apache2/server.info.crt
key = /etc/apache2/server.info.key
[websocket]
accept = 8079
connect = 8080
Ratchet配置为在8080中收听:
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, "0.0.0.0"); // Binding to 0.0.0.0 means remotes can connect
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
客户端正在尝试通过wss://server.ip:8079
进行连接,但是没有客户端可以连接,一旦发出请求,它们就会断开连接。
有什么想法吗?
答案 0 :(得分:1)
我也在使用Ratchet进行加密时通过stunnel。我的整个stunnel.conf
看起来像这样。使用与我的apache httpd服务器相同的pem。
cert = /etc/apache2/ssl/cert.pem
[websocket]
accept = YOUR_PUBLIC_IP_ADDRESS:8079
connect = 127.0.0.1:8080
您可能在端口之前缺少IP地址。我将密钥和证书组合在一起,但两者都应该有用。
答案 1 :(得分:0)
我在Mac OS中遇到了同样的问题,但只是通过将证书添加到钥匙串访问解决了这个问题,以便浏览器(Chrome和Safari)确认证书并建立连接