Jetty / Tomcat加密基于cookie的会话存储?

时间:2011-04-11 03:40:44

标签: java session cookies jetty cluster-computing

Ruby on Rails支持基于cookie的签名会话for quite some time,从那时起出现了一些encrypted implementationsPythonPHP也有实施。

Java servlet容器Jetty或Tomcat是否存在这样的野兽?

我们在集群环境中使用PHP实现获得了基于RDBMS的会话的显着性能提升,并且我有兴趣尝试使用我们的Java应用程序(目前使用Jetty 7)之类的东西。

我知道实现这一目标的其他方法(memcachedsynchronized in-memory缓存)但我相信,对于我们的特殊需求,这种存储方法的局限性(在输出之前完成会话,在 - 对于此特定应用程序,更简单的部署环境胜过4K cookie大小限制后的高效存储,依赖于超级秘密服务器端密钥。

如果某个实施不存在,是否有人有任何想法为什么它不会? (例如,Java会话通常大于4K,因此不适合这种存储方法)

3 个答案:

答案 0 :(得分:9)

我们已经实现了Session-In-Cookie并在Tomcat集群中成功使用它,以允许20个节点之间的会话共享,从而实现零中断部署。我刚刚在这里编写了关于实现的两部分系列的第一部分:http://blog.shinetech.com/2012/12/18/simple-session-sharing-in-tomcat-cluster-using-the-session-in-cookie-pattern/。这部分涉及基本实现,安全方面将在第二部分介绍。

答案 1 :(得分:1)

我不知道任何容器中的任何内容都会将HttpSession序列化为cookie。您可以通过实现Filter来实现此类任务,该{{3}}能够在对Web客户端的响应中将会话状态序列化为cookie并在请求上对其进行反序列化。您仍然受到任何客户端cookie限制的约束,您应该仔细考虑您存储客户端的状态的安全隐患和/或您对呈现cookie的客户端的信任程度。

答案 2 :(得分:1)

这里似乎有两个问题:

  1. 有效无状态会话管理的Java / J2EE实现。
  2. 安全会话实施。
  3. 关于第一个问题:是的,根据会话图的大小(所有会话变量/对象的深度嵌套),cookie大小限制(实际上是HTTP标头限制)是一个重要因素。如果会话图整齐地适合HTTP Header限制(在某种程度上可在Web服务器端配置)和/或可以使用基于REST的URL查询参数进行扩充(以减轻服务器上的某些状态信息) ...然后可以实现cookie。然而,这将是程序化的而不是容器管理的。

    关于第二个问题:确保会议安全是另一回事。 Java / J2EE系统中臭名昭着的JSESSIONID公共cookie是应用程序服务器上内存或磁盘缓存会话的简单令牌密钥。它只是一个地图键。使用该密钥,任何人都可以窃取或冒充用户会话。这可能是整个容器管理会话设备中最薄弱的环节之一。有一些商业安全会话产品可以防止cookie窃取会话劫持,防止重放攻击(可以通过捕获重放加密登录会话来获取会话来打败SSL)和其他攻击媒介。我所知道的一个产品可以在不更改代码的情况下执行此操作(通过安全过滤器)。但是,我不知道任何通用框架或开源计划来填补这个漏洞,可能是因为它需要一定程度的专业知识,而不仅仅是一般的应用程序开发。