在ssl连接中打开serversocket后,我可以重新加载trustmanager吗?

时间:2016-09-09 06:31:03

标签: java sockets ssl serversocket sslcontext

假设我已经创建了一个SSLContext,从serverSocketFactory创建了一个serverSocket,我已经开始接受连接。

像这样的东西: SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();

假设它正在运行一段时间,现在我决定修改我的TrustManager(添加/删除新证书以信任)。是否可以在不关闭套接字并创建新的SSLContext的情况下执行此操作?

1 个答案:

答案 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