【问题标题】:Session managment, SSL, WSGI and Cookies会话管理、SSL、WSGI 和 Cookie
【发布时间】:2012-12-07 20:11:29
【问题描述】:

我正在审查将 wsgi-app 实施到浏览器会话管理的可能性和可取性,而不使用任何现成的中间件。

正在考虑的一般方法是:

在浏览器和服务器之间使用 SSL。 将 SSL 会话 ID 公开给 WSGI 或 OS.environment,用作会话 ID 以启用应用程序级别的持久性和身份验证。 由于如果服务器+浏览器再次握手,SSL 会话 ID 可能随时更改,因此我们的想法是使用 cookie 来保存生成的 SSL ID 的散列版本。 如果他们握手并且检测到 SSL ID 的变化(暴露给环境的 SSL 会话 ID 与客户端返回的 cookie 不匹配),则可以检查散列的 cookie 以查看它是否包含先前已知的会话 ID,如果它那么我们应该继续当前会话并将 cookie 中使用的 SSL 会话 ID(并存储在后端数据库中)更新为新生成的通过握手 SSL 会话 ID。因此,即使 SSL 会话 ID 在我们脚下发生变化,我们也能继续会话。

据我了解,这个想法是让 SSL 生成会话 ID,并做一些比仅依靠 cookie+hmac 来保存会话 ID 更安全的事情。

我会对任何人对上述过程的想法感兴趣。原则上这对我来说似乎是合理的,但我对这种功能的经验很少。我已经为一些场景绘制了客户端、服务器和 wsgi-app 之间的交换流程,看起来效果很好,但我不太满意我已经涵盖了所有基础。

【问题讨论】:

    标签: python session cookies ssl wsgi


    【解决方案1】:

    你的协议有什么问题

    您可能需要考虑以下几点:

    1. Alice 联系您的服务器并获取 SSL 会话 ID S。包含H(S) 的 cookie 将发送给 Alice。
    2. Bob 正在监听交流。 SSL session ID 没有加密,所以他可以读取S
    3. Bob 联系您的服务器,并将会话 cookie 设置为 H(S)。无法识别他的会话 ID,但您的系统无论如何都会让他进入 Alice 的会话(并且可能也会将 Alice 踢出去!)。

    然后解决方案是使用 HMAC 对会话 ID 进行签名。但是,您不妨一开始就使用 HMAC 的会话 id。


    一些细节:

    • 要知道他应该发送的 Cookie 的名称,Bob 可以联系您的服务器。
    • Bob 也可以这样做来了解您正在使用的哈希算法

    HMAC 的优点

    会话 Cookies + HMAC 已被证明是加密安全的。 HMAC设计是为了验证数据。 HMAC 的逻辑是合理的,截至今天,该协议不存在任何攻击。

    更好的是,事实证明,对底层哈希算法的攻击并不意味着存在对 HMAC 的攻击(但这并不意味着您应该使用 MD5!)。

    没有理由您不想使用 HMAC。


    SSL 会话 ID 充其量对负载平衡器有用。

    永远不要实现自己的加密技术

    您永远不应该重新发明密码学。 (可能)数千名在该领域具有丰富经验的人已经审查了密码算法。

    每当您觉得自己有更好的想法时,您可能错过了一些东西。也许你不知道!但是你应该写一篇关于你的算法的论文,并让它进行同行评审。

    坚持标准。

    【讨论】:

    • 我认为这是一个问题,但首先我想问:在第 2 步中,“会话 ID 未加密”是什么意思 - 我知道这将作为服务器+客户端之间发送的 SSL 信息。 - 另外,在这种情况下,Bob 不需要读取 S?如果他可以从 Alice 那里窃取 H(S),然后与服务器发起一个新的 SSL 会话,那么该方案会让他继续作为 alices 会话吗?
    • 续...范围'? (即,“如果有人损害了你的系统,你的骨气无论如何”的论点)
    • @MattWarren 问题 1:SSL 会话 ID 以明文形式发送,查看 the wireshark documentation 以了解如何提取它,并在 this post to understand why 它已发送在明确。问题 2:我描述的场景称为“中间人攻击”,唯一的要求是 Bob 可以窥探 Alice 的流量。你会明白,这比 Bob 能够从 Alice 那里窃取会话密钥的要求要小(并且更有可能)。
    • @MattWarren 继续:如果 Bob 可以访问 Alice 的秘密信息(也就是说,他可以直接从 Alice 那里窃取H(S)),那么您对此无能为力。保护他们的计算机是用户的责任,保护传输和服务器是你的责任。例如,使用 HMAC + Cookies,如果 Bob 能够窃取 Alice 的会话 cookie,他将能够窃取 Alice 的会话。但同样,您对此无能为力。
    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2020-11-03
    • 2017-01-07
    • 1970-01-01
    • 2018-11-06
    • 2011-06-26
    相关资源
    最近更新 更多