php - 安全 WebSocket (wss ://) doesn't work on Firefox

标签 php html firefox websocket stunnel

我有一个可用的 WebSocket 非安全应用程序。但是我的网站使用 https,我需要一个安全的 WebSocket 连接来避免 Firefox 提示连接不安全。

我正在使用 php-websocket-server对于我的带有 PhP 5.2.9 的 WebSocket 服务器,所以当我使用安全的 WebSocket 时,我无法使用 openssl_decrypt 函数解密数据包。

这就是我使用 stunnel 的原因为了解密客户端使用 wss 发送的数据包,为此我将客户端 WebSocket 绑定(bind)到 12345 端口,将服务器 WebSocket 绑定(bind)到 54321 端口,然后我在服务器模式下添加了一个隧道:

[wsServer]
accept  = 12345
connect = 192.168.1.227:54321

使用此配置,我的应用程序可以通过 https + wss 在 Chrome 上正常运行。但是在 Firefox 上,握手过程中出现了问题, header 中似乎缺少 Sec-WebSocket-VersionSec-WebSocket-Key。我不明白,因为它通过 http + ws 在 Firefox 上运行。

预先感谢您的帮助。

编辑:我在端口 12345 上为证书添加了一个异常(exception),现在握手进行得很顺利,因为我认为 Firefox 现在有 Sec-WebSocket-Key

这里是 Firefox 的工作 header 请求(比 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

最佳答案

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

我认为您的浏览器不允许安全的 websocket 连接,这就是为什么某些 header 丢失的原因。

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

关于php - 安全 WebSocket (wss ://) doesn't work on Firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542460/

相关文章:

PHP 使用数据库中的 TIME 来计算小时数

php - 将部分 dom 元素转换为带有 h​​tml 标签的字符串

javascript - 在 Bootstrap Modal 窗口中将 mySQL 字符串呈现为 HTML

linux - 如何在Linux中的给定时间关闭Firefox?

css - border-bottom dotted 在 Chrome 的开始/结束处有实线

PHP 初学者 : How to "Order by" that query?

javascript - jVectorMap 加载 ajax 数据时出现问题

php - Apache 重写不适用于自定义扩展

html - 在网络上使用 Adob​​e 字体

Firefox 56 中的 HTML5 音频元素宽度始终相同