Secure WebSocket(wss://)在Firefox上不起作用

时间:2012-07-18 13:24:03

标签: php html5 firefox websocket stunnel

我有一个有效的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-VersionSec-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

1 个答案:

答案 0 :(得分:9)

如果您在本地使用自动签名证书,则必须在两台服务器上批准它:https://在端口443上运行,wss://在端口12345上运行,使用Firefox。

我认为您的浏览器不允许安全的websocket连接以及为什么缺少某些标头。