【问题标题】:How to use a let's encrypt ssl key in my spring boot application on kubernetes如何在 kubernetes 上的 Spring Boot 应用程序中使用 let's encrypt ssl 密钥
【发布时间】:2020-01-12 23:47:29
【问题描述】:

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

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

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

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

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

感谢您的建议

【问题讨论】:

    标签: spring-boot kubernetes lets-encrypt nginx-ingress cert-manager


    【解决方案1】:

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

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

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

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

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

    有用的文档cert-managercertbot

    【讨论】:

    • 谢谢,我会阅读文档,我对 cert-manager/bot 不是很熟悉。实际上,它很容易使用,而无需对我想做的事情有很多了解。但我意识到我不需要为我的 spring boot 客户端应用程序重用lets'enrypt 证书,我可以继续使用我的自签名密钥。使用 let's encrypt 密钥访问将请求重定向到我的客户端应用程序的 nginx 控制器是安全的,并且我的浏览器告诉我连接是安全的。我所要做的就是使用 https 强制重定向到我的客户端应用程序,并在我的 Ingress 中添加注释。
    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2019-03-20
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多