在Java中恢复TLS连接

时间:2012-09-07 12:40:13

标签: java

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

祝福

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

实际上,您必须保留sslcontext,因为它是包含ssl会话缓存的sslcontext。 SSLContext也有一个 SSLSessionContext getClientSessionContext()。此SSLSessionContext允许您调整要保留的ssl会话数和持续时间。

不幸的是,在第三方中访问SSLContext设置是非常罕见的。它们包装它以供您认为它们可以帮助您,或者它们不会要求您提供SSLServerSocketFactory类名(甚至不提供一个预先调优的实例) )。

在客户端套接字的情况下,它很难。我通常必须准备一个threadlocal套接字工厂,预计套接字会打开几十个更深的堆栈帧。

诀窍是提供轻量级socketfactory(客户端或服务器)的类名,除了查找包含您按照所需方式初始化的真实工厂的threadlocal(除了作为服务器或客户端的ssl会话的缓存)之外什么都不做