首页 > 解决方案 > SpringBoot - 使用 Spring Cloud Config 重新加载 SSL 证书

问题描述

我正在学习如何在 Spring Boot 中使用SSL 证书。特别使用 Let's Encrypt 的。

它们有 3 个月后过期的限制,因此应该更新它们,据我所知,在更新证书时,我们需要重新启动 Spring Boot 应用程序以使其加载新的应用程序。

前段时间,我在玩 Eureka 和 Zuul Gateway,开发微服务……我记得我还设置了一个 git repo 用作 Spring Cloud Config。记不太清了,我想我们可以不使用微服务架构而使用 Spring Cloud Config。

所以我的问题是:我们可以使用这种重新加载属性的Spring Cloud Config机制来重新加载 SSL 证书吗?这个想法是触发属性重新加载机制,并且由于ssl通过这些属性进行配置,我认为它可能可以重新加载。

我计划自动化获取和更新 Let's Encrypt 证书的过程,并避免我的应用程序停机。

此致!

标签: springspring-bootssllets-encryptspring-cloud-config

解决方案


SSL 证书在 JVM 级别应用 - Spring Boot 和 Spring Cloud Config 都无法对此进行控制,因此应用新证书需要重新启动您的应用程序运行的 JVM 实例,因为您已经更新了密钥库。能够在不关闭 JVM 的情况下动态添加证书将是一个主要的安全漏洞。

在 AWS 生态系统中,这个想法是,如果您关闭了您的虚拟机,您就会丢失该虚拟机,并且其中的内容将永远消失。使用 Spring Cloud(Config、Zuul、Eureka),您可以启动通过 Config 向 Eureka 注册的 VM,Zuul 使用 Eureka 中的信息进行负载平衡。所以,应该做的方式是你用你的 Spring Boot 实例用更新的证书启动另一个 VM,并杀死由于 AWS 而消失的旧 VM,Zuul 负责作为“反向网络”的肮脏工作代理”,根据需要将请求路由到新的 Web 服务器。

您打开这条路线的蠕虫罐头是,现在您必须实现 4 个服务器和一个 VPN 来支持它们,您的 Zuul 服务器成为外部 Web 请求的目标,您可能需要查看“断路器”模式如何处理 HTTP 请求失败——接下来要研究的是 Hystrix。

使用 Digital Ocean,我不确定您可能需要做些什么不同的事情,但 JVM 重启是不可避免的。


推荐阅读