【问题标题】:Can I reload trustmanager after opening serversocket in a ssl connection在 ssl 连接中打开 serversocket 后,我​​可以重新加载信任管理器吗
【发布时间】:2016-09-09 06:31:03
【问题描述】:

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

类似: SSLContext.getDefault().getServerSocketFactory().createServerSocket(1234).accept();

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

【问题讨论】:

    标签: java sockets ssl serversocket sslcontext


    【解决方案1】:

    您可以使用以下方法。

    首先,您在创建 SSLContext 对象时保留它的引用。

    SSLContext sslContext=SSLContext.getDefault();
    sslContext.getServerSocketFactory().createServerSocket(1234).accept();
    

    然后,当你想加载新的TrustManager时,可以再次调用init()方法,对应的TrustManager如下。

    TrustManager trustManagers[] = // load trust managers here.
    sslContext.init(null,trustManagers,null);
    

    这里,init() 方法有 3 个参数,KeyManager[]TrustManager[]SecureRandom。如果您为其中任何一个传递null,则SSLContext 将加载默认的密钥管理器和信任管理器。由于您只想加载信任管理器,因此您必须将新的 TrustManager[] 传递给它。

    由于您没有更改对 SSLContext 对象的引用,因此这不会中断您的流程或不会影响您现有的 SSLIOSessions。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多