我有一个 react 器模式的实现,其中我在 TransportListener
(基本上是一个在给定端口上监听 HTTPS 连接的监听器。)启动时加载 SSLContext
。
然后我再次调用相同的 init()
方法(通过 JMX 调用监听器的方法)
sslContext.init(keyManagers, trustManagers, null);
一旦我将证书添加到信任库或从中删除证书。我必须重新加载 SSLContext
以避免监听器出现任何停机时间。
这就是我目前面临的问题。
假设请求到达监听器并建立连接。如果我在响应返回给客户端之前重新加载 SSLContext
对象,这是否会影响连接的 SSLEngine
对象的 wrap
过程,该过程在之前加密有效负载发送?
注意:我已经验证相同的 SSLContext
对象正在传递给所有 SSLEngines。当 Listener 启动时,SSLContext 对象被传递给其他几个对象。例如,我有一个连接池,我必须将此 SSLContext 对象传递到该连接池。因此创建一个新的 SSLContext 对象将彻底打破现有的连接是连接池。这就是为什么我要尝试使用相同的 SSLContext 对象。
最佳答案
你需要考虑清楚。如果你有一个已建立的连接,它已经成功地进行了证书交换,所以它不需要新的证书,所以不需要新的或重新初始化的 SSLContext
,直到并包括部分握手,例如重新加密当前 session ,或请求客户端证书。除了完全握手之外,它根本不应该使用 SSLContext。
您需要做的是开始为所有需要新证书的新 连接使用新 SSLContext
。根据定义,您无需对现有连接执行任何操作。
关于java - 再次调用共享 SSLContext 对象的 init() 时对 SSLEngine 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275284/