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

Java Jetty/Tomcat基于cookie的加密会话存储?,java,session,cookies,jetty,cluster-computing,Java,Session,Cookies,Jetty,Cluster Computing,RubyonRails支持基于cookie的签名会话,从那时起出现了一些会话。并且也有实现 Java servlet容器Jetty或Tomcat是否存在这样的beast 在我们的集群环境中,通过PHP实现,与基于RDBMS的会话相比,我们已经获得了显著的性能提升,我有兴趣在我们的一个Java应用程序(目前使用Jetty 7)中尝试类似的东西 我知道实现这一目标的其他方法(,缓存),但我相信,对于我们的特殊需求,这种存储方法的局限性(输出前的会话终结、4K cookie大小限制后的高效存储、对超机

RubyonRails支持基于cookie的签名会话,从那时起出现了一些会话。并且也有实现

Java servlet容器Jetty或Tomcat是否存在这样的beast

在我们的集群环境中,通过PHP实现,与基于RDBMS的会话相比,我们已经获得了显著的性能提升,我有兴趣在我们的一个Java应用程序(目前使用Jetty 7)中尝试类似的东西

我知道实现这一目标的其他方法(,缓存),但我相信,对于我们的特殊需求,这种存储方法的局限性(输出前的会话终结、4K cookie大小限制后的高效存储、对超机密服务器端密钥的依赖)对于这个特定的应用程序,更简单的部署环境比这更重要


如果一个实现不存在,有人知道为什么它不存在吗?(例如,Java会话通常大于4K,因此不适合使用这种存储方法)

我不知道这两个容器中有任何东西会为您将HttpSession序列化为cookie。您可以通过实现将会话状态序列化为web客户端响应上的cookie并在请求上反序列化它的。您仍然绑定到任何客户端Cookie限制,并且应该仔细考虑您存储客户端的状态的安全性和/或您信任cookie的客户端的信任度。

这里似乎有两个问题:

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


    关于第二个问题:确保会话安全是另一回事。Java/J2EE系统中臭名昭著的JSESSIONID公共cookie是应用服务器上内存或磁盘缓存会话的简单令牌密钥。这只是一个地图键。使用该密钥,任何人都可以窃取或模拟用户会话。这可能是整个容器管理会话设备中最薄弱的环节之一。有一些商用安全会话产品可用于防止通过cookie窃取进行会话劫持、防止重播攻击(通过捕获重播加密的登录会话以获得会话来击败SSL)和其他攻击向量。据我所知,有一种产品可以做到这一点,而无需更改代码(通过安全过滤器)。然而,我不知道有任何通用框架或开源计划来填补这个漏洞,可能是因为它需要超出一般应用程序开发的专业水平。

    我们在Cookie中实现了会话,并在Tomcat集群中成功地使用了它,以允许在20个节点之间共享会话,从而实现零中断部署。我刚刚在这里编写了关于实现的两部分系列文章的第一部分:。本部分介绍基本实现,第二部分将介绍安全方面。

    序列化问题似乎是一个已经解决的问题。我计划试用的应用程序已经使用了前面的实现,我遇到的唯一问题是确保存储会话的任何类都存在于容器中,而不是servlet上下文中,您能想到其他方法吗:*确保实现将会话到期日期存储在加密的cookie中,并在服务器端强制执行,以防止永久重用被劫持的cookie。*避免将此实现用于“撤消”会话更改可能带来风险的任何应用程序。*确保加密密钥非常安全!我想知道我是否遗漏了什么。我想你可能混淆了两个想法——jetty中的会话集群是关于在两个或多个服务器实例之间共享会话状态;是的,您需要关注连接到HttpSession的对象的序列化。在这种情况下,jsessionid(通常基于cookie)是任何服务器实例用来定位共享会话的标识符。因此,您可以通过多种方式在服务器之间实现负载平衡。但是,这与将相关会话状态序列化为cookie不同。在这种情况下,您不需要在服务器上进行会话集群。更多……对于cookie存储,您只需要表示cookie中的相关状态,在答案中的示例中,您的过滤器将负责对相关HttpSession属性进行膨胀/收缩。至于安全性,您应该从一个基本的威胁评估开始,以决定需要保护什么,但是,一般来说,cookie状态不超过任何类型的篡改。如果您存储敏感信息(密码、私人信息等),则攻击者可能会检索到这些信息。你还必须判断你的客户有多值得信任-如果你依赖客户发送给你的关于客户的信息,你需要相信客户没有向你发送虚假信息或试图获得客户通常不会拥有的授权。所以,让你的威胁评估来指导你,但一定要意识到后果。在将近两年之后,你回答了我的问题:1)它确实存在,因为你已经实施了它,2)它直到现在还没有完成