如何在 kubernetes 上的 spring 引导应用程序中使用 let's encrypt ssl 密钥

How to use a let's encrypt ssl key in my spring boot application on kubernetes

我在 kubernetes 上有一个 spring 引导应用程序 运行,这是一个客户端应用程序,服务于 React 应用程序并代理对其他服务的请求。

该客户端应用程序可通过使用 Nginx 控制器的 Ingress 使用。 我有一个针对 Nginx 控制器服务的域名,我已经能够使用来自 let's encrypt 的 cert-manager 生成有效的证书和密钥,并且证书和密钥会在必要时自动更新。

到目前为止,我使用通过 keytool 生成的自签名证书来保护我的不同应用程序之间的通信(我想我仍然可以使用该工具进行内部通信),但是对于客户端应用程序,我需要使用 let's encrypt 生成的关键。

现在我的客户端应用程序不使用 ssl(ssl.enable 在我的 bootstrap.yml 中是错误的)。所以我认为 Ngix Ingress 控制器和客户端应用程序之间的通信是不安全的。

在此过程中使用证书和密钥创建了一个 k8s 秘密,所以我想我可以使用它,但最好的方法是什么?如果可能的话,我还想提供证书的自动更新。

感谢您的建议

有些客户端会重复使用之前使用的私钥(certbot 与 --reuse-key 选项以及 acme.sh 一起使用时)。除非有人知道具有此类功能的客户端,否则您应该从列表中检查客户端,看看客户端是否可以导入现有的私钥。或者至少不是很困难。

Certbot 需要先颁发证书才能重新使用密钥。可行的选择是:

  • 安装 certbot(参见 https://certbot.eff.org/29)
  • 获取由 certbot 颁发的证书而不关心密钥, 让它正常工作。

  • use --staging for test certificates 先手动交换PEM 格式化私钥 /etc/letsencrypt/archive/name-of-your-certificate/privkey1.pem 与 您自己的 PEM 格式私钥使用 certbot 更新证书 更新--reuse-key

  • 检查更新证书中的 public 密钥是否与 你自己的 public/private 键 如果上面检查出来(用 --staging 测试选项),您可以删除测试证书并再次执行上述操作,但没有 --staging 以获得真正的工作 证书.

有用的文档cert-manager, certbot