我有一个通过HTTPS提供的Web应用程序。对于一些计算密集型工作,此Web应用程序将卸载工作到服务器。为此,它将打开与服务器的WebSocket连接。
为了允许离线使用和长时间运行的计算而不对中央服务器施加太多负载,我想允许用户在本地安装服务器组件的一个版本,很可能是以Docker容器的形式。
这意味着HTTPS Web应用程序必须打开一个WebSocket到localhost - 它必须是一个不安全的WebSocket,因为我当然无法为localhost发送证书。
我最初认为这是不可能的,因为至少在Chrome中,HTTPS页面可能无法打开WebSockets到非安全端点:
但是,与localhost的连接似乎有例外。尽管如此,假设未来不会发生变化似乎有点冒险。
是否有更加面向未来的方法,例如通过正常的HTTP请求隧道传输?我希望有一个适用于所有现代浏览器的解决方案,不需要插件或其他设置,只需要本地程序以某种方式监听本地连接。
答案 0 :(得分:1)
你绝对不想在localhost上公开一个非经过身份验证的websocket连接 - 另一个页面可以连接到localhost以使本地计算机执行某些(潜在的危险/不安全)任务,即使你给本地计算机一个证书。
我建议您在计算机上安装的客户端生成自签名证书。我还强烈建议它使用某种行业标准的每用户身份验证(可能只有一个简单的HTTP标头授权字段),只有 为您的网络服务器所知。如果您可以在客户端下载中提供密钥,那么这是理想的选择。否则,客户端可以直接与您的Web服务器通信以获取此密钥(通过用户通过客户端登录)。然后,Web服务器可以将密钥传递给浏览器,然后浏览器可以使用适当的授权打开与localhost的连接。