假设我已经创建了一个SSLContext,从serverSocketFactory创建了一个serverSocket,我已经开始接受连接。
像这样的东西:SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();
假设它正在运行一段时间,现在我决定修改我的TrustManager(添加/删除新证书以信任)。是否可以在不关闭套接字并创建新的SSLContext的情况下执行此操作?
答案 0 :(得分:1)
您可以使用以下方法。
首先,在创建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
将加载默认的密钥管理器和信任管理器。由于您只想加载信任管理器,因此必须将新的TrustManager[]
传递给它。
由于您未更改对SSLContext
对象的引用,因此不会破坏您的流量或不会影响您现有的SSLIOSession
。