Websocket安全

Joh*_*Doe 26 security authentication websocket

我希望使用WebSockets实现web(角度)和iPhone应用程序与我们的服务器进行通信.在过去使用HTTP请求时,我们使用哈希值使用请求数据,URL,时间戳等来验证和保护请求.

据我所知,我们无法发送带有WebSockets请求的标头,因此我想知道如何保护每个请求.

有没有人有任何想法或良好做法?

Pie*_*len 18

要保护您的消息,请使用SSL/TLS上的WebSockets(wss://而不是ws://).不要滚动你自己的加密.

关于身份验证.HTTP和WebSockets之间的最大区别在于HTTP是无状态协议而WebSockets则不是.

使用HTTP,您必须为每个请求发送标头(cookie,令牌,等等).使用WebSockets建立连接.在第一次交互中,您可以对客户端进行身份验证,对于连接的其余部分,您知道客户端已通过身份验证.

Heroku的人员描述了一种模式,客户端使用HTTP进行身份验证,获取票证,然后通过WebSocket连接将该票证作为第一条消息发送.请参阅https://devcenter.heroku.com/articles/websocket-security


小智 3

与服务器进行安全通信包括验证双方的身份。如果您需要通过一个通信通道为不同的用户提供不同的身份验证凭据(这在当今是一种罕见的想法),您将需要单独的身份验证。否则,您只需要提出密钥分发方案(以便您的应用程序知道服务器的公钥,并且您的服务器有一个了解客户端公钥的协议,有很多模式可以实现这一点)。

为此,有一个比 SSL 或您自己的加密货币更宽的选择梯度(尽量避免不惜一切代价编写您自己的加密货币)。

对于堆栈中的网络服务器到浏览器部分,SSL 是您唯一的选择,但它不应该被视为一种良好的安全措施,每年都会出现越来越多的漏洞、密码退化案例和信任问题。它背负着 20 年来糟糕的工程决策和紧急修复的包袱,所以如果你能得到更好的东西 - 那就值得这样做。不过,对于普通网络来说,这总比没有好得多。

在您的移动应用程序中,您可以轻松使用多个加密库之一,提供与服务器的安全会话消息传递,并具有显着更高的安全保证,无需依赖:

  • https://github.com/mochtu/libsodium-ioslibsodium-ios是 NaCl 的 ios 包装器,是最好的现代密码库之一,它对 ECC 密码学有很多新颖的实现,在学术界受到高度赞扬,并被编写由一个热衷于在任何情况下都有最佳表现的疯子(简而言之:我喜欢它:))。

  • Themis是我参与的一个项目,我们的库有非常 ObjC 友好的 iOS 版本,还有一个关于在 iOS 中通过 Websocket 进行安全流量的便捷教程:https: //www.cossacklabs.com/building-secure-聊天