Security SSL会话持久性和安全cookie

Security SSL会话持久性和安全cookie,security,session,ssl,cookies,https,Security,Session,Ssl,Cookies,Https,我目前有一个roll your your自己的应用程序安全服务,它在我的企业中运行,在很大程度上满足了业务需求 我目前面临的问题是,该服务传统上(天真地)依赖于用户的源IP保持不变以防止会话劫持-企业中的web应用程序不能直接向公众提供,过去我完全可以接受要求用户地址在给定会话中保持不变 不幸的是,情况已不再如此,因此我不得不切换到不依赖源IP的解决方案。我更希望实现一个能够真正实现原始设计者意图的解决方案(即防止会话劫持) 到目前为止,我的研究结果表明,“用SSL会话密钥对身份验证令牌哈希进行

我目前有一个roll your your自己的应用程序安全服务,它在我的企业中运行,在很大程度上满足了业务需求

我目前面临的问题是,该服务传统上(天真地)依赖于用户的源IP保持不变以防止会话劫持-企业中的web应用程序不能直接向公众提供,过去我完全可以接受要求用户地址在给定会话中保持不变

不幸的是,情况已不再如此,因此我不得不切换到不依赖源IP的解决方案。我更希望实现一个能够真正实现原始设计者意图的解决方案(即防止会话劫持)

到目前为止,我的研究结果表明,“用SSL会话密钥对身份验证令牌哈希进行加密。”

从表面上看,这似乎是一个完美的解决方案,但我一直怀疑,由于客户端和服务器可能在任何时候(有效地任意)选择重新协商SSL会话,从而更改密钥,因此该方案的实际实现是不切实际的

这就是我所设想的情景:

  • SSL会话已建立,密钥已商定
  • 客户端在应用程序级别对服务器进行身份验证(即通过用户名和密码)
  • 服务器写入包含SSL会话密钥的安全cookie
  • 导致会话重新协商的事件。例如,我认为IE在计时器上做这件事是有原因的还是没有原因的
  • 客户端向服务器提交一个包含旧会话密钥的请求(因为没有应用程序级的重新协商知识,所以没有机会向客户端写入新的、更新的哈希)
  • 由于哈希匹配失败等原因,服务器拒绝客户端的凭据

  • 这是一个真正的问题还是我的误解,因为(至少可以说)我对SSL的工作原理的理解不够完美?

    是的,但有几件事可以做。最简单的方法是缓存用作salt的会话密钥(每个用户),并接受其中任何一个。即使会话被重新协商,您仍然可以将其保存在缓存中。这里有一些细节——过期策略等等——但没有什么是不可克服的,除非您运行的是需要加强的东西,在这种情况下,您首先不应该这样做

    --MarkusQ

    查看与此相关的所有主题。这是负载平衡器界研究得很好的问题

    简短的回答是:您不能依赖SSLID——大多数浏览器都会重新协商,您仍然必须使用源IP。如果IP地址可能会在会话中期更改,则您可以强制进行软重新验证,或使用SSLID作为两个IP更改之间的桥梁(反之亦然,即,仅当IP地址和SSLID同时更改时才假设劫持,如服务器所示)

    2014年更新

    只需强制使用
    https
    ,并确保您不易受到攻击。不要费心用任何客户端信息来攻击您的身份验证令牌,因为如果攻击者能够获得该令牌(前提是该令牌不仅仅是微不足道的猜测),那么无论使用何种手段来获得它(例如,或完全破坏客户端系统)还将允许攻击者轻松获取可能进入令牌的任何客户端信息(并在需要时在辅助系统上复制这些信息)


    如果客户机可能只从几个系统连接,那么您可以为客户机连接的每个新客户机系统(其中公共部分提交到服务器,而私有部分保留在安全的客户机存储中)并重定向到一个虚拟主机,用它代替基于密码的身份验证。

    我想知道为什么它不足以

  • 在传输中需要ssl
  • 对输入(html/url/属性)进行编码以防止跨站点脚本编写
  • 仅要求对所有更改信息和
  • 尽可能防止CSRF(取决于平台支持的内容)
  • 将cookies设置为HTTPOnly

  • 但这种缓存解决方案无法解决客户端突然使用应用程序不知道的新SSL会话密钥的问题。客户端必须说“我现在使用一个新的SSL会话密钥”,或者服务器必须通知应用程序密钥更改。不,客户端只会根据旧会话密钥发送一个cookie(重新协商会话不会清除cookie)。盐的存在只是为了让人难以猜测,它可能是任何东西。SSL会话密钥非常方便,大小合适,具有适当的熵。@MarkusQ,如果我真的将cookie从机器A复制到机器B,然后伪装成机器A(通过新的SSL会话),我不确定如何解决问题。如果我理解正确,在cookie中包含SSL会话信息的目的是有效地将cookie不仅绑定到机器(当前使用的IP地址),而且绑定到通信链路(SSL隧道)@Vlad Romascanu@——假定的攻击者首先是如何获得cookie的?它毕竟是通过SSL实现的。如果他们可以破坏SSL链接或任何一台机器达到这种程度,那么您已经沉没。您是否成功地“通过……未加密的通信通道来面对它”?否,您必须使用加密的通道,否则您将容易受到SSL/TLS创建来阻止的所有攻击。