【问题标题】:How can I get a Netty server to reload a TLS certificate when it is renewed?续订时如何让 Netty 服务器重新加载 TLS 证书?
【发布时间】:2018-03-29 21:52:56
【问题描述】:

我有一个基于 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/,并使用一些代码从Programmatically Obtain KeyStore from PEM 加载密钥/证书(Netty 的 PEM -> KeyStore 逻辑在 SSLContext 类中是不公开的)。好处:也可以在 Netty 之外工作。缺点:复杂且不重用 Netty 的现有逻辑来加载 PEM 密钥和证书。

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

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

【问题讨论】:

    标签: java ssl netty aleph


    【解决方案1】:

    回答我自己的问题。

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

    【讨论】:

    • 是的,我有这个问题,我相信和其他许多人一样。它是Java端的PITA。虽然我找到了这种方式,但它可能允许绕过密钥库。 netty.io/wiki/forked-tomcat-native.html
    • 您尝试过这种方法吗?我尝试实现确切的东西,但它没有得到刷新。
    • 是的,我向我的 Netty 管道构建器添加了代码,该构建器从缓存位置添加 SSL 上下文。该位置的上下文会定期使用来自 S3 的最新证书进行更新。到目前为止运行良好。
    猜你喜欢
    • 2017-02-06
    • 2014-01-09
    • 2021-11-11
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2016-10-20
    相关资源
    最近更新 更多