我有一个有效的WebSocket非安全应用程序。但我的网站使用https,我需要一个安全的WebSocket连接,以避免Firefox抱怨连接不安全的事实。
我在使用PhP 5.2.9的WebSocket服务器上使用php-websocket-server,因此当我使用WebSocket安全时,我无法使用openssl_decrypt函数解密数据包。
这就是为什么我使用stunnel来解密客户端使用wss发送的数据包,为此我将绑定的客户端WebSocket连接到12345端口服务器WebSocket到54321端口,然后我在服务器模式下添加了一个stunnel:
[wsServer]
accept = 12345
connect = 192.168.1.227:54321
使用此配置,我的应用程序可以通过https + wss在Chrome上正常运行。但是在Firefox上,握手期间出现问题,标题中似乎缺少Sec-WebSocket-Version
和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
答案 0 :(得分:9)
如果您在本地使用自动签名证书,则必须在两台服务器上批准它:https://在端口443上运行,wss://在端口12345上运行,使用Firefox。
我认为您的浏览器不允许安全的websocket连接以及为什么缺少某些标头。