我有一个有效的 WebSocket 非安全应用程序。但是我的网站使用 https 并且我需要一个安全的 WebSocket 连接来避免 Firefox 抱怨连接不安全的事实。
我将php-websocket-server用于我的带有 PhP 5.2.9 的 WebSocket 服务器,所以当我使用 WebSocket 安全时,我无法使用 openssl_decrypt 函数解密数据包。
这就是为什么我使用stunnel来解密客户端使用 wss 发送的数据包,为此我将客户端 WebSocket 绑定到 12345 端口,将服务器 WebSocket 绑定到 54321 端口,然后我在服务器模式下添加了一个 stunnel:
[wsServer]
accept = 12345
connect = 192.168.1.227:54321
使用此配置,我的应用程序通过 https + wss 在 Chrome 上运行良好。Sec-WebSocket-Version
但是在 Firefox 上,握手期间出现问题,标题中似乎Sec-WebSocket-Key
没有。我不明白,因为它通过 http + ws 在 Firefox 上工作。
在此先感谢您的帮助。
编辑:我为端口 12345 上的证书添加了一个例外,现在握手进展顺利,因为我认为 Firefox 现在有Sec-WebSocket-Key
.
这里是 Firefox 的工作标头请求(大于 Chrome 请求):
GET / HTTP/1.1
Host: 192.168.1.227:12345
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive, Upgrade
Sec-WebSocket-Version: 13
Origin: https://192.168.1.227
Sec-WebSocket-Protocol: HyBi-00
Sec-WebSocket-Key: 65nHN33M6drIPjQHcGK8pA==
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket