如何从安全的网站访问不安全的WebSocket?

5
TL;DR: 一个网站通过HTTPS服务,并需要在未加密的通道上访问WebSockets服务器(ws:// url)。但浏览器不支持此操作。
虽然可以对WebSocket进行加密,但这样不太方便——没有可信的机构可以签署证书,因此需要为每个客户端手动安装证书。我想把这留作最后的办法。
该网站必须通过HTTPS服务,并且不能降级为HTTP。
是否有其他方法来绕过此限制?我尝试了Content-Security-Policy,但它没有起作用。

如果存在这种情况,那么这是一个安全漏洞,需要进行修复。 - President James K. Polk
@JamesKPolk - 你这么认为吗?CORS是为了在合法情况下明确绕过同源策略而发明的。为什么不为绕过“相同安全级别”(或称其它名称)开发类似的东西呢? - Vilx-
我认为困难在于用户界面设计。浏览器应该如何向用户指示它们不再安全?混合内容警告? - President James K. Polk
@JamesKPolk - 我认为开发人员应该负责确保安全,然后告诉浏览器“是的,即使它没有通过加密通道加载,它仍然是安全的”。再次强调,这与CORS相同 - 开发人员明确并付出额外的努力告诉浏览器“是的,这是可以接受的”。然后就不需要额外的用户界面了。 - Vilx-
1
CORS通过允许在受控的、允许的制度下跨站点来维护安全性。从SSL安全页面使用非SSL websocket会破坏安全性,这是无法改变的事实。开发人员不能说没问题,因为它确实存在问题——开发人员无法防止攻击的发生。它是否实际上阻止了websocket或者只是给出了混合内容警告? - President James K. Polk
@JamesKPolk - 作为一名开发者,我希望它能够默默地进行,这样我的用户就不需要担心或者知道这件事。至于攻击——在这种情况下,我99%确定是安全的。它只在我们的网络内部,在NAT后面,即使黑客以某种方式劫持了通道,他也无法造成任何损害——最坏的情况是一些人会困惑为什么屏幕上的数据明显是错误的。所以,是的,我想告诉浏览器“这是可以的,我对此负全部责任,不要说任何话并允许它”。 - Vilx-
1个回答

5

Vix,

您所描述的情况是在实施非安全 Websocket 连接限制时被视为安全问题的情况之一。

访问安全网站(HTTPS)的用户会认为所有数据都是安全的。浏览器不允许在此上下文中进行非安全通信(除非存在安全故障)。这应该包括在安全上下文中调用的资源请求和任何其他请求(预计“混合内容”消息将逐渐消失,因为限制将加强)。

在某些浏览器上,情况甚至更糟。例如,即使页面经过临时批准证书加载,Safari 也会拒绝向未签名服务器打开安全 Websocket 连接。

是否有其他方法绕过此限制?

很抱歉地告诉您,对于您的问题,简短的答案是“没有”。


1
好的,谢谢您提供的信息。我会尝试看看如何让证书生效(网站有哪些方法可以发出提示,以永久安装/信任自签名证书?)。 - Vilx-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接