5

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

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

随着 Let's Encrypt 及其相对短暂的证书的日益普及,这似乎是一个热门和普遍的问题,我想妥善解决它。这意味着一种与 Netty 兼容的方式来创建 SSLContext,如果它们在磁盘上发生更改,它将重新加载其证书。

我想出的一些方法:

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

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

谁能指出我的解决方案,或提出构建解决方案的最佳方法?

4

1 回答 1

4

回答我自己的问题。

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

于 2019-02-21T06:23:38.567 回答