现在我们的应用程序被设计成在初始加载后通过websockets进行所有通信。
我们正试图找出一个解决方案,通过这种传输安全地传递敏感数据。
到目前为止,我们正在考虑几件事:
- 通过传回唯一的websocket传输身份验证 存储在初始加载时通过SSL传递的会话cookie中的散列。
客户端加密使用类似javascript bcrypt的东西
只是通过SSL通过普通post传递所有敏感数据
类似第一条的东西将是最好的结果,但我们不知道websocket是否容易受到中间人攻击,即使在身份验证之后。
任何帮助找出可能的安全问题,或任何其他关于如何在websockets上实现真正安全的想法将非常感谢!
连接wss://
WebSocket URL而不是ws://
将使用浏览器的标准TLS/SSL加密连接到服务器。这相当于HTTPS vs HTTP。如果您信任浏览器的SSL/TLS实现,那么您可以信任WebSocket wss://
连接,因为它们使用相同的引擎。您将需要为您的websocket服务器配置一个已签名的SSL证书,但这几乎是必需的。
安全(使用SSL/TLS加密)对您的数据非常重要。但是您也应该考虑身份验证。如果不需要首先进行身份验证,任何拥有ws功能的设备,并且知道您的服务器端点的人都可以获得数据。参见http://simplyautomationized.blogspot.com/2015/09/5-ways-to-secure-websocket-rpi.html包括一个3-way握手方法(CHAP),它要求客户端和服务器都有一个"预共享的秘密"。其他方法在帖子中有详细说明。
欢呼
关于cookie,可能值得考虑的是,(目前),WebSockets协议规范不要求浏览器提供所有,甚至任何cookie,这些cookie是由web服务器最初服务的JavaScript设置的,您使用它来打开到该服务器的WebSockets连接。
查看这里的Firefox行为描述(来自FF开发人员)