我正在评估实现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你是什么意思'会话ID未加密' - 我知道这将作为发送的SSL信息的一部分进行加密服务器+客户端之间。 - 另外,Bob在这种情况下不需要读S,如果他可以从Alice那里窃取H(S),然后发起一个新的与服务器的SSL会话,那么该方案会让他继续保持会话吗? –
续... 我已经提出这个问题,但答案是'如果你的系统受到破坏,所以鲍勃可以窃取H(S),那么你有其他安全问题,不在这个范围'? (IE;'如果有人已经妥协了你的系统你的骨胳'无论如何说法) –
@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)。 –