连接双向 SSL 的网页脚本失败

时间:2021-02-15 19:34:06

标签: javascript python ssl websocket

我在两个不同的端口上运行网站服务器和 websocket 服务器。我希望在两者上都启用双向 SSL。该网站使用的是 gunicorn/flask 应用程序,并且在所有浏览器(桌面/移动设备,移动 Firefox 除外)上的双向 SSL 都可以正常工作。该网页内有一个脚本,用于连接到同样启用了双向 SSL 的 websocket(python websockets 服务器)。 这只适用于桌面版 Firefox;其他任何事情都会导致错误 WebSocket connection to '<domain>:<port>' failed: WebSocket opening handshake was canceled

在桌面 Firefox 上,它为网页和 websocket 请求用户证书,但就像我说的那样,其他任何事情都会返回上述错误。

我一直在互联网上寻找解决方案,并看到了一些关于使用某些托管服务提供商的代理的信息,但我自己托管这些信息,如果可能的话,我宁愿不要太深入地设置更多的东西。为了澄清起见,关闭双向 ssl 并仅进行服务器证书验证确实有效。只有当 websocket 请求客户端证书时,什么都没有发生并且错误出现在控制台中(客户端,服务器端没有任何显示)。

有没有人知道如何为站点和 websocket 保留双向 SSL?安全性是此应用程序的主要关注点。

1 个答案:

答案 0 :(得分:0)

这看起来与 Cannot create WSS connection with Chrome, other browser work 中描述的问题相同。问题是 Chrome 和 Safari 不会提示 Websockets 连接的客户端证书。请参阅仍处于打开状态的 this bug from 2013

如果用户已经选择了在同一来源上使用哪个客户端证书,它仍然可以工作。只是,来源包括端口,并且您的 Websocket 与您的网站位于不同的端口上。这种设置还会导致其他问题(例如限制性防火墙),因此最好使用单一来源并从该来源反向代理 Websocket。有关如何使用 nginx 执行此操作,请参阅 this comment on the same bug

相关问题