如何在Kubernetes上的Spring Boot应用程序中使用Lets加密ssl密钥

最后发布: 2019-09-11 07:18:59


问题

我有一个在Kubernetes上运行的spring boot应用程序,一个为React应用程序提供服务的客户端应用程序以及向其他服务的代理请求。

该客户端应用可通过使用Nginx控制器的Ingress获得。 我有一个以Nginx控制器服务为目标的域名,我已经能够使用cert-manager生成一个有效的证书和密钥,让我们进行加密,并且在必要时也会自动更新证书和密钥。

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

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

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

感谢您的建议

spring-boot kubernetes lets-encrypt nginx-ingress cert-manager
回答

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

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

  • 安装certbot(请参阅https://certbot.eff.org/ 29)
  • 获得certbot颁发的证书而无需关心密钥,只需使其工作即可。

  • 使用--staging测试证书第一手动/etc/letsencrypt/archive/name-of-your-certificate/privkey1.pem用自己的PEM格式的私钥交换PEM格式的私钥恢复与certbot证书更新--reuse -键

  • 检查更新后的证书中的公钥是否与您自己的公钥/私钥相对应如果上述内容已签出(使用--staging选项进行测试),则可以删除测试证书并再次执行上述操作,但无需--staging获得真实的工作证明。

有用的文档cert-managercertbot