如何从安全网站访问不安全的 websocket?
How to access an insecure websocket from a secure website?
TL;DR:网站通过 HTTPS 提供服务,需要通过未加密的通道 (ws:// url) 访问 WebSockets 服务器。浏览器不喜欢这样。
加密 websocket 是可能的,但不方便 - 没有可以签署证书的可信机构,因此需要为每个客户端手动安装它。我想把它作为最后的手段。
网站必须通过 HTTPS 提供服务,不能降级为 HTTP。
有没有其他方法可以绕过这个限制?我尝试了 Content-Security-Policy,但没有用。
维克斯,
您描述的场景是在限制打开非安全 Websocket 连接到位时被认为是安全问题的场景之一。
访问安全网站 (HTTPS) 的用户假定所有数据都是安全的。浏览器将不允许在此上下文中进行非安全通信(除非它存在安全故障)。这应该包括资产请求和在安全上下文中调用的任何其他请求(随着限制收紧,预计 "mixed content" 消息会慢慢淡入历史)。
在某些浏览器上甚至更糟。例如,Safari 将拒绝打开与未签名服务器的安全 Websocket 连接,即使网页是在临时批准证书的情况下加载的。
Is there any other way to bypass this restriction?
很遗憾地报告,您的问题的简短答案是 "no"。
TL;DR:网站通过 HTTPS 提供服务,需要通过未加密的通道 (ws:// url) 访问 WebSockets 服务器。浏览器不喜欢这样。
加密 websocket 是可能的,但不方便 - 没有可以签署证书的可信机构,因此需要为每个客户端手动安装它。我想把它作为最后的手段。
网站必须通过 HTTPS 提供服务,不能降级为 HTTP。
有没有其他方法可以绕过这个限制?我尝试了 Content-Security-Policy,但没有用。
维克斯,
您描述的场景是在限制打开非安全 Websocket 连接到位时被认为是安全问题的场景之一。
访问安全网站 (HTTPS) 的用户假定所有数据都是安全的。浏览器将不允许在此上下文中进行非安全通信(除非它存在安全故障)。这应该包括资产请求和在安全上下文中调用的任何其他请求(随着限制收紧,预计 "mixed content" 消息会慢慢淡入历史)。
在某些浏览器上甚至更糟。例如,Safari 将拒绝打开与未签名服务器的安全 Websocket 连接,即使网页是在临时批准证书的情况下加载的。
Is there any other way to bypass this restriction?
很遗憾地报告,您的问题的简短答案是 "no"。