vlambda博客
学习文章列表

免费给 Spring Boot 加个证书

每日技术干货,第一时间送达!



在本文中,我们将学习如何执行以下操作:


  • 免费生成有效证书

  • 用它配置一个 Spring Boot 应用程序

  • 到期时续订


在我之前的博客文章中,我们熟悉了带有自签名证书的 Spring Boot 应用程序的配置。自签名证书适用于特定目的,例如测试和开发。但是,如果需要将他的应用程序发送到生产环境,证书应该由已知且合法的证书颁发机构 (CA) 签署。


这些类型的证书通常很昂贵。如果您想使用 TLS 强化您的应用程序,您需要购买其中之一。应用程序服务器的价格和复杂的配置成为许多 Web 应用程序使用安全连接的障碍。


在后斯诺登时代,没有人需要说服我们使用 HTTPS 进行安全连接是必须的。为了提高开发人员和 IT 管理员对他们制作的每个网站使用此类技术的意识,我们付出了很多努力。但是怎么做?


Let's Encrypt项目旨在将 HTTPS 引入万维网,不仅免费,而且采用最简单的配置方式。


在本文中,我们将介绍:


  • 颁发证书和 Spring Boot 集成


  1. 如何使用 Let's Encrypt 生成证书 

  2. 如何从 PEM 文件生成 PCKS#12 文件

  3. Spring Boot 应用程序的配置


  • 续订(即将)过期的证书


  1. 续订流程

  2. 准备 Spring Boot


 

1

如何使用 Let's Encrypt 生成证书


Let's Encrypt 为一些应用服务器(如 Apache 和 Nginx)提供了几个插件。在本节中,由于我们的目标是 Spring Boot 应用程序(带有嵌入式 Jetty/Tomcat),我们只生成证书,然后与我们的应用程序集成。


如果您在服务器或云提供商处使用防火墙或任何其他安全机制,您应该放松几分钟,尤其是端口 80 和端口 443。




$ git clone https://github.com/certbot/certbot
$
 cd certbot
$
 ./certbot-auto --help


备注:需预先安装 Python 2.7.8(或以上)。


  • 通过在您的终端中执行以下命令,Let's Encrypt 会为您生成证书和私钥。


$ ./certbot-auto certonly -a standalone \
     -d seeld.eu -d www.seeld.e
u


密钥在/etc/letsencrypt/live/seeld.eu中生成。 

备注:  'certonly' 表示该命令不附带任何特殊插件,如 Apache 或 Nginx。“独立”意味着 Let's encrypt 将自动在端口 80 上创建一个简单的 Web 服务器,以证明您控制了域。



2

如何从 PEM 文件生成 PKCS12 文件


证书私钥分两步免费生成,可见Let's Encrypt的简单性。所有这些生成的材料都带有PEM扩展,Spring Boot 不支持该扩展。Spring Boot 不支持 Let's Encrypt 生成的 PEM 文件。Spring Boot 支持 PKCS12扩展。使用 OpenSSL,我们将证书和私钥转换为 PKCS12。


要将 PEM 文件转换为 PKCS12 版本:


  1. 转到 /etc/letsencrypt/live/seeld.eu。

  2. 我们在终端中使用 OpenSSL 将密钥转换为 PKCS12,如下所示。


$ openssl pkcs12 -export -in fullchain.pem \ 
                 -inkey privkey.pem \
                 -out keystore.p12
                 -name tomcat \
                 -CAfile chain.pem \
                 -caname root


现在在“/etc/letsencrypt/live/seeld.eu”中生成带有 PKCS12 的文件“keystore.p12”。


 

3

Spring Boot 应用程序的配置


现在我们想要配置我们的 Spring Boot 应用程序以从证书和私钥中受益,并最终准备好 HTTPS。此时,我们已经生成了我们的证书和私钥。然后我们将密钥转换为 PKCS12 扩展,该扩展已准备好用于 Spring 应用程序。


  1. 打开你的'application.properties'

  2. 把这个配置放在那里


server.port: 8443
security.require-ssl=true
server.ssl.key-store:/etc/letsencrypt/live/seeld.eu/keystore.p12
server.ssl.key-store-password: <your-password>
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat


备注'require - ssl' - 表示您的服务器仅处理受 HTTPS 保护的请求。


如果您访问 https://seeld.eu:8443,您可以看到 HTTPS 已成功配置并且最重要的是可以正常工作。为了我们的项目,我们做了一些额外的步骤来让 HTTPS 使用端口 80。您可以使用 https://seeld.eu URL 浏览它。




4

续订过程


Let's Encrypt 证书的有效期只有90 天。有人可能会说,与其他提供商提供的证书的有效期相比,3 个月太短了。他们做出这个严格决定有两个动机:限制密钥泄露或错误发布造成的损害,以及鼓励自动化。所以让我们开始吧!


  • 打开您的 Let's Encrypt 客户端目录,我的意思是 certbot。


备注:在证书和密钥所在的同一台机器上。请阅读章节中的所有备注,例如安装 python、打开端口 80 等。


  • 按如下方式运行更新命令。


$ sudo ./certbot-auto renew


此命令检查位于本机(由 Let's Encrypt 管理)中的证书的到期日期,并更新已过期或即将过期的证书。


我们有新证书,就这么简单! 


如本节所述:Spring Boot 不支持 Let's Encrypt 生成的 PEM 文件。Spring Boot 支持 PKCS12 扩展。使用 OpenSSL,我们将证书和私钥转换为 PKCS12。


 

5

准备 Spring Boot


让我们创建一个 PKCS#12 密钥库!


  • 转到 /etc/letsencrypt/live/seeld.eu


  • 我们在终端中使用 OpenSSL 将密钥转换为 PKCS12,如下所示。


$ openssl pkcs12 -export -in fullchain.pem \ 
                 -inkey privkey.pem \
                 -out keystore.p12
                 -name tomcat \
                 -CAfile chain.pem \
                 -caname root


现在在“/etc/letsencrypt/live/seeld.eu”中生成带有 PKCS12的文件“ keystore.p12 ”。


可是等等!


我假设您正在使用的机器是运行 Spring Boot 的机器。这意味着我们还没有完成!之前的' keystore.p12 '还在内存中,意味着你需要重启你的应用程序! 


简单地重新启动正在运行的应用程序并不总是可行的。可能还有其他方法可以在不重新启动的情况下对其进行更新,但这不在本文的讨论范围内。



6

最后


在这篇文章中,我们了解了如何颁发、更新 Let's Encrypt 证书,最重要的是,将其与 Spring Boot 集成。只需不到 5 分钟即可准备好所有东西。


对我来说,主要的信息是 Let's Encrypt 让(重新)颁发证书对每个人来说都非常快速、简单和便宜,无论你管理多少服务!您应该尽快开始使用 HTTPS。


PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。

 

END



往期推荐