再次调用共享SSLContext对象的init()时对SSLEngine的影响

时间:2016-09-01 15:13:48

标签: java ssl sslengine sslcontext ultraesb

我有一个reactor模式的实现,当SSLContext(基本上是一个监听器,监听给定的HTTPS连接端口)正在启动时,我加载了TransportListener

然后我再次调用相同的init()方法(通过 JMX 调用侦听器的方法)

sslContext.init(keyManagers, trustManagers, null);

我在信任存储中添加或删除证书。我必须重新加载SSLContext以避免在侦听器中出现任何停机时间。

所以这就是我目前面临的问题。

假设请求来到侦听器并建立连接。如果我在将响应返回给客户端之前重新加载SSLContext对象,是否会影响连接的SSLEngine对象的wrap进程,该进程在发送之前对有效负载进行加密?

注意:我已经验证了相同的SSLContext对象被传递给所有SSLEngines。当监听器启动时,SSLContext对象被传递给其他几个对象。例如,我有一个连接池,我必须传递这个SSLContext对象。因此,创建新的SSLContext对象将完全打破现有连接是连接池。这就是为什么我试图使用相同的SSLContext对象。

1 个答案:

答案 0 :(得分:0)

你需要考虑这一点。如果您已建立连接,则它已成功进行证书交换,因此无需新证书,因此无需新的或重新初始化SSLContext,包括部分握手,例如重新生成当前会话,或请求客户端证书。它根本不应该使用SSLContext进行完全握手。

您需要做的是开始为所有需要新证书的连接使用 new SSLContext。根据定义,您不需要对现有连接做任何事情。