如何让Netty服务器在续订时重新加载TLS证书?

时间:2017-10-18 05:02:16

标签: java ssl netty aleph

我有一个基于Netty的服务器,它使用PEM编码的证书文件,这些文件定期重新发布(通过Let's Encrypt)。 Netty完全支持加载PEM加密材料,但是稍后重新发布证书(.cer文件)时,需要重新启动服务器才能看到它。

到目前为止,我已经通过添加自定义通道初始化处理程序来添加逻辑以重新加载证书并添加由此构建的适当SSLHandler。但是现在我想要使用Aleph,并且它需要一个用于TLS的Netty SSLContext对象。

这似乎是一个热门的普遍问题,因为Let的加密及其相对短命的证书越来越受欢迎,我想要妥善解决它。这意味着创建SSLContext的Netty兼容方式,如果它们在磁盘上发生更改,将重新加载其证书。

我提出了一些方法:

  1. 创建一个动态信任管理器/信任存储库,然后将其插入Netty SSLContextBuilder。可以使用它是一个起点https://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-java-trust-store/,并从Programmatically Obtain KeyStore from PEM获取一些代码来加载密钥/证书(Netty的PEM - > KeyStore逻辑在SSLContext类中不公开)。好处:也在Netty外面工作。缺点:复杂并且不会重复使用Netty现有的逻辑来加载PEM密钥和证书。

  2. 将此添加为Netty支持的选项。

  3. 有人能指出我的解决方案,或建议建立一个解决方案的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。

答案是:不要在此级别上这样做。相反,请让Netty堆栈外部的某个东西监视证书,并在证书更改时从管道中删除现有的SSL处理程序,并用从新证书创建的SSLContext替换为新的SSL处理程序。