spring - 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 证书的过程,并避免我的应用程序停机。
此致!
解决方案
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 重启是不可避免的。
推荐阅读
- sql-server - 基于两列的展开数据表,SQL server
- python - Python 中的 buf.readUInt16LE(offset) 等价物是什么
- python - 在 Python 中的 try 子句中继续,即使引发了异常
- angular - Angular 7 从 POST 下载 PDF 文件
- c# - 无法将 .NET Core 控制台应用程序连接到 Db2 数据库
- reactjs - React redux:使用 mapStatetoProps 的多个操作,以及一个通用的 reducer
- python - 有没有办法从 POST/PUT 与 Tornado 服务器异步检索正文?
- serial-port - 如何使用串行库从机器人框架中的 USB 读取数据?
- c#-6.0 - EF core2.1 Count/Distinct
- sql-server - SQL 服务器发送包含数据库数据的数据库邮件