【问题标题】:Embedded Tomcat - update/delete certificates without restarting嵌入式 Tomcat - 无需重新启动即可更新/删除证书
【发布时间】:2020-01-19 16:12:22
【问题描述】:

我在创建连接器时使用嵌入式 Tomcat 并使用SSLHostConfig 添加 SNI 证书。它工作得很好。

我也可以在不重启 Tomcat 的情况下添加证书:

SSLHostConfig sslHostConfig = new SSLHostConfig();
sslHostConfig2.setHostName(host);
sslHostConfig2.setCertificateFile(path);
connector.addSslHostConfig(sslHostConfig);

这也很有效。

此外,无需重新启动 Tomcat,我可以使用以下方法获取所有现有 SSLHostConfig 实例的列表:

SSLHostConfig[] sslHostConfigs = connector.findSslHostConfigs();

但是,我不知道如何更新或删除现有的 SSLHostConfig 实例。在数组中将其设置为 null 不起作用。此外,用新的 SSLHostConfig 实例在数组中替换它也不起作用。

有没有办法在不重启 Tomcat 的情况下删除或修改 SSLHostConfig 实例?

谢谢。

【问题讨论】:

  • connector.removeSslHostConfig(host)?根据我在github.com/apache/tomcat/commit/… 中看到的
  • 确实,提交在 Set 15, 2017! 上完成时被标记为“9.0.26”(但不确定它是否真的合并到这个版本中,它被标记为所有以前的版本)。因此,除了等待新版本之外,您还可以使用它修补本地副本以拥有它。或者你可以成为这个新版本的测试者,并专门针对你需要的这个确切的功能进行测试,如果你报告任何问题,我相信开发人员会很高兴。或者,如果可能,编写当前连接器类的子类,以访问其内部 sslHostConfigs 变量。 PS:我对Tomcat一无所知。
  • 我仍然建议您额外确保该版本中包含特定的提交,甚至更好地在您的某个测试环境中自己测试该版本,然后才能真正生效,这样您就可以同时评估您需要的功能是否已包含在内并按照您需要的方式工作。
  • 该方法在 Tomcat 9.0.x 9.0.0 以后的所有版本中都可用。
  • @MarkThomas - 如果你不介意,你能回答最初的问题吗?非常感谢!

标签: ssl tomcat9 sni


【解决方案1】:

要使用新的证书文件(最初创建它时引用)更新 SSLHostConfig,这可行:

    Http11NioProtocol protocol (Http11NioProtocol)connector.getProtocolHandler();
    protocol.reloadSslHostConfig(host);

当然,这假设您使用 Http11NioProtocol 作为连接器的协议处理程序。

【讨论】:

    最近更新 更多