2012-12-07 51 views
1

我正在评估实现wsgi-app浏览器会话管理的可能性和可行性,而不使用任何现成的中间件。会话管理,SSL,WSGI和Cookies

所考虑的一般方法是:

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

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

我会对任何人对上述过程的想法感兴趣。原则上,我听起来很合理,但我对这种功能的使用经验很少。我已经绘制了几个场景下客户端&服务器& wsgi-app之间的交流流程,它看起来工作得很好,但我不舒服我已经涵盖了所有的基础。

回答

2

有什么不对您的协议

你可能要考虑以下几点:

  1. 爱丽丝接触您的服务器并获取SSL会话ID S。包含H(S)的cookie被发送给Alice。
  2. 鲍勃正在收听交流。 SSL会话ID未加密,因此他可以读取S
  3. Bob将会话cookie设置为H(S)与您的服务器联系。他的会话ID没有被识别,但是你的系统无论如何都会让他进入Alice的会话中(也可能会把Alice踢出去!)。

解决方案然后是使用HMAC所以签署会话ID。但是,你可能首先使用一个HMAC'ed会话ID。


的一些细节:

  • 知道cookie的,他应该发送的名称,鲍勃只需联系您的服务器。
  • 鲍勃可以做同样获得哈希算法的概念,您使用的是

什么是伟大的HMAC

会话Cookie + HMAC已经被证明是加密安全。为了验证数据,HMAC为设计了。逻辑behing HMAC是健全的,到目前为止,还没有协议存在的攻击。

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

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


对于负载均衡器,SSL会话ID最多是有用的。

千万不要实施你自己的密码学

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

每当你觉得你有更好的主意,你可能会错过一些东西。也许你不会!但是,你应该在你的算法上写一篇论文,并让它进行同行评审。

坚持标准。

+0

我曾经看到这是一个问题,但首先我想问:在步骤2你是什么意思'会话ID未加密' - 我知道这将作为发送的SSL信息的一部分进行加密服务器+客户端之间。 - 另外,Bob在这种情况下不需要读S,如果他可以从Alice那里窃取H(S),然后发起一个新的与服务器的SSL会话,那么该方案会让他继续保持会话吗? –

+0

续... 我已经提出这个问题,但答案是'如果你的系统受到破坏,所以鲍勃可以窃取H(S),那么你有其他安全问题,不在这个范围'? (IE;'如果有人已经妥协了你的系统你的骨胳'无论如何说法) –

+0

@MattWarren问题1:SSL会话ID被*发送清除*,看看[wireshark文档](http:// wiki .wireshark.org/SSL)看看如何提取它,并在[这篇文章中了解为什么](http://docwiki.cisco.com/wiki/Secure_Sockets_Layer_Persistence_Configuration_Example)它是以明文形式发送的。问题2:我描述的场景被称为“中间人攻击”,唯一的要求是Bob可以窥探Alice的流量。你会明白这比Bob能够从Alice窃取会话密钥要少一些(而且更可能是** far)。 –