7

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

1 回答 1

11

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

我认为您的浏览器不允许安全的 websocket 连接,这就是为什么缺少一些标头的原因。

[从@Faisal 评论更新,因为它非常重要]
答案是正确的,但有点不清楚。好的,就是这样。
当您尝试使用 wss://mysite.com:12345 打开 wss 时,Firefox 将继续给您错误,直到您打开单独的 Firefox 选项卡并尝试点击 URL [https]://mysite.com: 12345并确认安全异常(就像您在 Firefox 上通常针对任何基于 https 的连接所做的那样)。
这真的很奇怪,而且只发生在 Firefox 中。

于 2012-07-19T05:58:46.213 回答