我正在学习如何在Sping Boot 中使用SSL证书。特别是使用Let's Encrypt证书。
它们有3个月后过期的限制,所以它们应该更新,据我所知,在更新证书时,我们需要重新启动Sping Boot 应用程序,以便使其加载新的。
前段时间,我在玩Eureka 和Zuul Gateway,开发微服务.我记得我还设置了一个git repo作为Spring Cloud Config。我记得不太清楚了,我想我们可以使用Spring Cloud Config而不使用微服务拱门。
所以我的问题是:我们可以使用这个Spring Cloud Configreload properties的机制来重新加载SSL Certificate吗?我们的想法是触发properties reloading机制,并且由于ssl
是通过这些properties配置的,我认为它可能可以重新加载。
我计划自动化获取和更新Let's Encrypt证书的过程,并避免我的应用程序停机。
最好的问候!
3条答案
按热度按时间w6mmgewl1#
可以使用Sping Boot 热重载SSL证书。有关详细信息,请参阅https://stackoverflow.com/a/77587583/12488082
33qvvth12#
SSL证书是在JVM级别应用的-Sping Boot 和Spring Cloud Config对此都没有任何控制权,因此要应用新的证书需要重新启动应用运行的JVM示例,因为您已经更新了密钥库。能够在不关闭JVM的情况下动态添加证书将是一个主要的安全缺陷。
在AWS生态系统中,我们的想法是,如果您关闭了VM,您将丢失该VM,并且其中的内容将永远消失。(Config,Zuul,Eureka )您可以通过Config启动在Eureka 注册的VM,Zuul使用Eureka 中的信息来进行负载平衡。因此,应该这样做的方式是你用你的Sping Boot 示例和更新的cert启动另一个VM,并杀死旧的VM,由于AWS,旧的VM蒸发了,而Zuul则负责作为“反向Web代理”的肮脏工作,根据需要将请求路由到新的Web服务器。
你打开这条路线的蠕虫罐是,现在你必须实现4个服务器和一个VPN来支持它们,你的Zuul服务器成为外部Web请求的目标,你可能需要研究如何处理HTTP请求失败的“断路器”模式- Hystrix是下一个要研究的东西。
对于Digital Ocean,我不确定您可能需要做什么不同的事情,但JVM重启是不可避免的。
kcwpcxri3#
实际上,这取决于。证书是在SSLContext级别上应用的,SSLContext可以在运行时刷新。完全可以在KeyStore中更新证书并刷新SSLContext,而且,Tomcat有一个特殊的帮助函数
reloadSslHostConfigs
可以帮助你做到这一点。所以你问的是完全可行的:
1.您的应用程序从Spring-Cloud或某些共享存储加载更新的证书
1.应用程序发出
reloadSslHostConfigs
,以便Tomcat更新其SSLContext有关证书重新加载的实现细节,您可以查看letsencrypt-helper库。它允许在不重启JVM的情况下生成和更新LetsEncrypt证书。