会话管理,SSL,WSGI和Cookies

时间:2012-12-07 11:18:18

标签: python session cookies ssl wsgi

我正在审查将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有几个场景,看起来效果很好,但是我觉得我已经涵盖了所有的基础。

1 个答案:

答案 0 :(得分:2)

您的协议有什么问题

您可能需要考虑以下事项:

  1. Alice与您的服务器联系并获取SSL会话ID S。包含H(S)的Cookie将发送给Alice。
  2. Bob正在收听交流。 SSL会话ID未加密,因此他可以阅读S
  3. Bob使用设置为H(S)的会话Cookie与您的服务器联系。他的会话ID无法识别,但无论如何你的系统都会让他进入Alice的会话中(也可能会把Alice踢出去!)。
  4. 然后解决方案是使用HMAC,以便签署会话ID。但是,你可能只是首先使用HMAC的会话ID。


    一些细节:

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

    HMAC

    有什么好处

    会话Cookie + HMAC已被证明具有加密安全性。 HMAC是设计的,用于验证数据。逻辑虚拟HMAC是健全的,并且到目前为止,协议上没有存在攻击。

    更好的是,证明了对基础哈希算法的攻击并不意味着存在对HMAC的攻击(这并不意味着你应该使用MD5!)。

    没有理由为什么你不想使用HMAC。


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

    永远不要实现自己的加密

    你永远不应该重新发明密码学。密码算法已被(可能)数千名具有该领域经验的人员审查过。

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

    坚持标准。