我有一个reactor模式的实现,当SSLContext
(基本上是一个监听器,监听给定的HTTPS连接端口)正在启动时,我加载了TransportListener
。
然后我再次调用相同的init()
方法(通过 JMX 调用侦听器的方法)
sslContext.init(keyManagers, trustManagers, null);
我在信任存储中添加或删除证书。我必须重新加载SSLContext
以避免在侦听器中出现任何停机时间。
所以这就是我目前面临的问题。
假设请求来到侦听器并建立连接。如果我在将响应返回给客户端之前重新加载SSLContext
对象,是否会影响连接的SSLEngine
对象的wrap
进程,该进程在发送之前对有效负载进行加密?
注意:我已经验证了相同的SSLContext
对象被传递给所有SSLEngines。当监听器启动时,SSLContext对象被传递给其他几个对象。例如,我有一个连接池,我必须传递这个SSLContext对象。因此,创建新的SSLContext对象将完全打破现有连接是连接池。这就是为什么我试图使用相同的SSLContext对象。
答案 0 :(得分:0)
你需要考虑这一点。如果您已建立连接,则它已成功进行证书交换,因此无需新证书,因此无需新的或重新初始化SSLContext
,包括部分握手,例如重新生成当前会话,或请求客户端证书。它根本不应该使用SSLContext进行完全握手。
您需要做的是开始为所有需要新证书的新连接使用 new SSLContext
。根据定义,您不需要对现有连接做任何事情。