假设我已经创建了一个 SSLContext,从 serverSocketFactory 创建了一个 serverSocket,并且我已经开始接受连接。
类似于:
SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();
假设它运行了一段时间,现在我决定修改我的 TrustManager(添加/删除要信任的新证书)。是否可以在不关闭套接字并创建新的 SSLContext 的情况下执行此操作?
最佳答案
您可以使用以下方法。
首先,在创建 SSLContext
对象时保留对它的引用。
SSLContext sslContext=SSLContext.getDefault();
sslContext.getServerSocketFactory().createServerSocket(1234).accept();
然后,当你想加载新的TrustManager
时,你可以用相应的TrustManager再次调用init()
方法,如下.
TrustManager trustManagers[] = // load trust managers here.
sslContext.init(null,trustManagers,null);
这里,init()
方法有 3 个参数,KeyManager[]
、TrustManager[]
和 SecureRandom
。如果您为它们中的任何一个传递 null
,SSLContext
将加载默认的 key 管理器和信任管理器。由于您只想加载信任管理器,因此必须将新的 TrustManager[]
传递给它。
由于您没有更改对 SSLContext
对象的引用,因此这不会中断您的流程或不会影响您现有的 SSLIOSession
。
关于java - 在 ssl 连接中打开 serversocket 后,我可以重新加载 trustmanager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39405180/