1

我正在研究 Java TLS 客户端和服务器,女巫会经常通信。我知道协商 TLS 连接非常耗费资源和时间。我在GnuTLS中找到了一个非常有趣的解决方案。我很感兴趣是否可以创建具有恢复功能的 Java TLS 客户端 - 使用先前协商的数据建立新连接。

最好的祝愿

4

2 回答 2

3

只要您使用相同的 SSLSocketFactory 创建套接字,Java 中的 JSSE 实现将自动恢复现有会话,如果会话仍然有效。

您可以通过调用SSLSocket.getSession().getId()并检查两个不同的套接字是否使用相同的会话来验证这一点。

于 2012-09-07T13:05:16.110 回答
3

实际上,您必须保留的是 sslcontext,因为它包含 ssl 会话缓存。SSLContext 还有一个 SSLSessionContext getClientSessionContext()。此 SSLSessionContext 允许您调整要保留多少个 ssl 会话以及保留多长时间。

不幸的是,在第 3 方中访问 SSLContext 设置的情况非常罕见。他们为您包装它,认为它们对您有帮助,或者他们什么都不做,要求您提供 SSLServerSocketFactory 类名(甚至不是一个预先调整的实例)。

在客户端套接字的情况下,它只是有困难。我通常必须准备一个线程本地套接字工厂,以预计套接字将打开几十个更深的堆栈帧。

诀窍是提供轻量级socketfactory(客户端或服务器)的类名,它只查找包含您以所需方式初始化的真正工厂的threadlocal(使用ssl会话缓存,作为服务器或客户端)。

于 2016-01-31T23:24:21.290 回答