首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用挑战响应保护websocket连接?

如何使用挑战响应保护websocket连接?
EN

Security用户
提问于 2015-09-01 13:52:41
回答 1查看 1.6K关注 0票数 2

鉴于web浏览器的所有状态信息都可以被(潜在的敌对)用户访问,那么浏览器和服务器之间的挑战响应身份验证如何被认为是安全的呢?

更长版本的

我正在开发一个web应用程序,我希望实现web套接字,以便在客户机和服务器之间进行通信。我正在研究如何实现一个湿法路由器,并试图通过这样的系统来理解身份验证的模式。

WAMP协议允许挑战响应认证(CRA).我理解它的方式(如果我错了,请纠正我),当客户端请求连接时,服务器发送一个问题。然后,客户端使用一个在客户机和服务器之间共享的秘密密钥加密挑战并返回它。服务器从客户端检查加密版本,如果加密正确,则允许访问。共享秘密的使用使服务器能够知道请求来自授权客户端。

这导致了问题1:发送到浏览器的Javascript代码必须包含共享的秘密。所以分享的秘密不是很秘密,是吗?那么,我们如何认为这是一种安全的身份验证方法呢?

在思考这个问题时,我想出了一个我认为可能解决问题的解决方案。

重要注意事项:所有连接将通过TLS进行保护。

下面是我的身份验证系统的工作方式:

  1. 用户通过普通的、基于表单的身份验证方法登录。
  2. 服务器生成一个身份验证密钥和一个秘密,并将这些值作为页面HTML的一部分传递给客户端。密钥和秘密都是通过加密安全方法生成的。
  3. 然后客户端启动websocket连接。这将使用服务器生成的密钥和秘密开始挑战响应身份验证序列。
  4. 服务器使用密钥和秘密进行身份验证,一切都很酷。

这里的关键是一次性使用密钥和秘密值.如果它们定期更改,那么攻击者就无法生成密钥/秘密对,也无法使用以前访问时保存的密钥/秘密对。

这就引出了问题2:这是一个足够的身份验证方案吗?

最后,问题3:假设上面描述的身份验证方案是足够的,那么密钥/秘密值应该多久改变一次?我认为它应该在每次用户登录时都会改变,并且在6到8个小时之后也应该过期。有什么想法?

EN

回答 1

Security用户

发布于 2015-09-01 14:19:07

这导致了问题1:发送到浏览器的Javascript代码必须包含共享的秘密。所以分享的秘密不是很秘密,是吗?那么,我们如何认为这是一种安全的身份验证方法呢?

如果您学习挑战响应认证的WAMP文档,您应该注意到以下信息:

客户端和服务器共享一个秘密。秘密永远不会传出去,

相反,它被认为是在进行身份验证之前共享的:

秘密的实际预共享超出了认证机制的范围。

如果在浏览器中使用Websockets,这可能意味着包含该秘密的代码应该使用TLS传输。当在发送给用户的独立应用程序中使用Websockets时,可以在应用程序中预先发送秘密。由于秘密本身并不是特定于用户的,而是只用于保护通信的,因此在任何类型的身份验证之前都可以进行交换。

重要注意事项:所有连接将通过TLS进行保护。

WAMP-CRA被明确地设计成可用于非TLS.从文件中:

..。因此,WAMP-CRA可以通过非TLS连接使用。

当然,WAMP-CRA可以与TLS一起使用,但是如果您已经有了安全连接,则不需要使用设计为在非TLS限制范围内工作的协议,但是您可以使用更简单的身份验证,比如基于cookie的身份验证,或者使用TLS提供的相互身份验证。

..。这让我想到第二个问题..。最后,问题3:

由于您最初的假设是错误的,因此没有必要在现有协议的基础上添加安全性。因此,我不讨论问题的这些部分,这些部分涉及添加的身份验证层的安全性。

但是有一个更普遍的答案,它独立于您使用的框架: Websockets是通过升级现有的HTTP(s)连接创建的一个通信通道。这意味着为HTTP(s)连接所做的任何类型的身份验证都可以应用于Websocket连接,即相互TLS身份验证、基本认证、会话cookie等。因此,如果HTTP(s)连接已经过身份验证,则无需在Websocket通道内进行额外的身份验证,因为这是已经授权的相同的TCP/TLS连接。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/98297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档