0

我有一个在 kubernetes 上运行的 Spring Boot 应用程序,一个为反应应用程序提供服务并将请求代理到其他服务的客户端应用程序。

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

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

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

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

感谢您的建议

4

1 回答 1

1

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

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

  • 安装 certbot(参见https://certbot.eff.org/ 29)
  • 在不关心密钥的情况下获得由 certbot 颁发的证书,让它工作。

  • 使用 --staging 测试证书首先手动将 /etc/letsencrypt/archive/name-of-your-certificate/privkey1.pem 中的 PEM 格式私钥 您自己的 PEM 格式私钥交换 使用 certbot renew --reuse更新证书-钥匙

  • 检查更新证书中的公钥是否与您自己的公钥/私钥对应如果上述检查(使用 --staging选项进行测试),您可以删除测试证书并再次执行上述操作,但不使用 --staging获得真正的工作证书。

有用的文档cert-manager , certbot

于 2019-09-11T11:52:03.507 回答