Java 在ssl连接中打开serversocket后是否可以重新加载trustmanager
假设我已经创建了一个SSLContext,从serverSocketFactory创建了一个serverSocket,并且我已经开始接受连接 比如:Java 在ssl连接中打开serversocket后是否可以重新加载trustmanager,java,sockets,ssl,serversocket,sslcontext,Java,Sockets,Ssl,Serversocket,Sslcontext,假设我已经创建了一个SSLContext,从serverSocketFactory创建了一个serverSocket,并且我已经开始接受连接 比如: SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234.accept() 假设它运行了一段时间,现在我决定修改我的TrustManager(向trust添加/删除新证书)。是否可以在不关闭套接字和创建新SSLContext的情况下执行此操作?您可以使用以下方法
SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234.accept()代码>
假设它运行了一段时间,现在我决定修改我的TrustManager(向trust添加/删除新证书)。是否可以在不关闭套接字和创建新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
将加载默认密钥管理器和信任管理器。由于您只想加载信任管理器,因此必须将新的TrustManager[]
传递给它
由于您没有更改对SSLContext
对象的引用,因此这不会中断您的流程,也不会影响现有的SSLIOSession
s