集群中的 Tomcat TLS 会话恢复
Posted
技术标签:
【中文标题】集群中的 Tomcat TLS 会话恢复【英文标题】:Tomcat TLS session resumption in cluster 【发布时间】:2019-11-20 12:54:58 【问题描述】:TLS 允许通过会话 ID 或会话票据恢复会话。 This post 展示了如何在 Apache Web 服务器和 nginx 中执行此操作。特别是,Apache 有一个SSLSessionTicketKeyFile
directive,它允许 TLS 会话票证通过特定密钥加密,而不是在启动时随机选择的密钥。这在集群中很有用,其中任何集群成员都可以打开由另一个成员通过共享密钥加密的票证。
我在Tomcat TLS documentation 中找不到类似的功能。但是,我发现了一个名为 setTicketKeys
的方法,它似乎完全符合我的要求:
public void setTicketKeys(byte[] keys)
Sets the SSL session ticket keys of this context.
Parameters:
keys - The session ticket keys
我还发现a class from Facebook Nifty 使用了这个功能。
我的问题是:我需要一个
OpenSSLSessionContext
的实例来调用setTicketKeys()
。我应该如何获得这个实例?
编辑:如果这可以通过配置完成,那就更好了!
【问题讨论】:
您将通过一些配置元素来完成此操作,而不是通过编写代码。 @user207421: 做配置实际上是首选。你能给我建议吗? 您是否考虑过查阅文档? @user207421:当然。请参阅我帖子中的第二段。 【参考方案1】:这实际上记录在Tomcat documentation 中:主要内容是:
仅通过配置无法实现,因为您必须在上下文侦听器上显式设置标志(尽管您也需要配置连接器才能启用该功能!) 代理和 SSL 终止当然有一些注意事项(例如,如果 Tomcat 终止 SSL 会话,您将无法继续使用它) 不支持 APR 连接器(还没有?),仅支持 NIO(2) 连接器【讨论】:
对不起,但这个答案说明了什么不能做。我需要通过代码或配置来做到这一点。所以我需要的是一个答案,它显示了如何通过使用其中一个或两个来做到这一点。 此外,SSL 会话跟踪是另外一回事:使用 SSL 会话 ID 来跟踪用户,而不是 cookie。以上是关于集群中的 Tomcat TLS 会话恢复的主要内容,如果未能解决你的问题,请参考以下文章