Websocket安全性

问题描述 投票:26回答:4

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

据我所知,我们无法通过WebSockets请求发送标头,因此我想知道如何保护每个请求。

有人有什么想法或好的做法吗?

security authentication websocket
4个回答
4
投票

与服务器进行安全通信包括相互认证双方。如果您需要通过一个通信渠道使用不同的身份验证凭据来引导不同的用户(这在当今是一种罕见的想法),则需要单独的身份验证。否则,您只需要提出密钥分配方案(以便您的应用知道服务器的公共密钥,并且服务器具有熟悉客户端的公共密钥的协议,为此有很多模式。)>

为此,选择梯度要比SSL或您自己的加密货币宽一些(尝试避免不惜一切代价编写自己的加密货币。)>

对于从堆栈到Web服务器到浏览器的部分,SSL是您唯一的选择,但是,不应将它视为一种很好的安全措施,每年都会出现越来越多的漏洞,密码降级案例和信任问题。它承载了20年的糟糕工程决策和紧急修复包,因此,如果您能得到更好的东西-这样做是值得的。不过,对于常规网络,它总比没有好。

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

  • https://github.com/mochtu/libsodium-ioslibsodium-ios

    ,NaCl的ios包装器,NaCl是最好的现代密码库之一,它具有ECC密码学的许多新颖实现,在学术界受到高度赞扬,并由a。狂人渴望在所有情况下都能表现最佳(简而言之:我很喜欢:))。
  • [Themis

    ,我参与的一个项目,我们的库具有非常兼容ObjC的iOS版本,以及有关在iOS中通过网络套接字进行安全流量的便捷教程:https://www.cossacklabs.com/building-secure-chat
  • ] >

    [为了保护您的消息,请通过SSL / TLS使用WebSockets(wss://而不是ws://)。不要投放自己的加密货币。

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

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

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

    我同意SSL / TLS wss://连接。始终使用加密的流量。有几种实现身份验证的方法。看这里:http://simplyautomationized.blogspot.com/2015/09/5-ways-to-secure-websocket-rpi.html

    大多数示例都使用python或nodejs,并且直接针对Raspberry Pi,但一般概念是可以考虑的好主意。帖子中有指向SocketRocket帮助程序库的链接,该链接使您可以将身份验证插入auth标头(SocketShuttle)。

    大多数示例都使用python或nodejs,并且直接针对Raspberry Pi,但一般概念是可以考虑的好主意。帖子中有指向SocketRocket帮助程序库的链接,该链接使您可以将身份验证插入auth标头(SocketShuttle)。


18
投票

[为了保护您的消息,请通过SSL / TLS使用WebSockets(wss://而不是ws://)。不要投放自己的加密货币。

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


3
投票

我同意SSL / TLS wss://连接。始终使用加密的流量。有几种实现身份验证的方法。看这里:http://simplyautomationized.blogspot.com/2015/09/5-ways-to-secure-websocket-rpi.html

大多数示例都使用python或nodejs,并且直接针对Raspberry Pi,但一般概念是可以考虑的好主意。帖子中有指向SocketRocket帮助程序库的链接,该链接使您可以将身份验证插入auth标头(SocketShuttle)。


0
投票

大多数示例都使用python或nodejs,并且直接针对Raspberry Pi,但一般概念是可以考虑的好主意。帖子中有指向SocketRocket帮助程序库的链接,该链接使您可以将身份验证插入auth标头(SocketShuttle)。

© www.soinside.com 2019 - 2024. All rights reserved.