当前位置: 首页 > 科技观察

SpringBootHTTPS证书部署指南_0

时间:2023-03-12 10:30:42 科技观察

作者丨EmadHeydariBeni编译丨邱凯点评丨孙淑娟,梁策在本文中,我们将学习以下内容:1.免费创建有效可用的证书2.配置此证书在SpringBoot应用中3.自动更新证书有效期在上一篇文章中,我们已经熟悉了如何通过自签名证书来配置SpringBoot应用。自签名证书非常适合开发和测试。但是,如果要将应用发布到生产环境,则证书需要由已知的合法证书颁发机构(CertificateAuthorities,CA)签署。这些证书通常很昂贵,并且需要使用TLS来保护您的应用程序。服务器价格和配置复杂性是许多Web应用程序使用HTTPS的障碍。后斯诺登时代,通过HTTPS安全访问已成为大众共识。我们付出了很多努力来提高开发人员和IT管理员的安全意识和对HTTPS的全面采用。但是怎么办?Let'sEncrypt项目致力于以一种免费且简单的方式将HTTPS技术引入万维网(WorldWideWeb)。在本文中,我们将介绍以下内容:颁发证书并在SpringBoot中部署它们1.使用Let'sEncrypt生成证书2.通过PEM证书制作PCKS#12证书3.在SpringBoot应用程序中部署证书更新过期或即将过期过期证书1.证书更新流程2.SpringBoot准备如何使用Let'sEncrypt生成证书Let'sEncrypt为一些中间件(如Apache和Nginx)提供了几个插件。本节工作环境为SpringBoot应用(内嵌Jetty或Tomcat),我们只需要生成证书并部署到应用中即可。如果你的服务器(或云服务提供商)使用了防火墙或其他安全机制,你需要开放80和443端口。80端口需要开放并免费使用,因为Let'sEncrypt需要证明你对这个域有控制权通过自动证书管理环境(即ACME协议)在后台运行小型HTTP服务来获取名称地址。您需要花几分钟时间在域名地址指向的服务器上获取Let'sEncrypt源码。$gitclonehttps://github.com/certbot/certbot$cdcertbot$./certbot-auto--help注意:需要预装Python(2.7.8或以上)。在终端执行以下命令,Let'sEncrypt会自动生成证书和私钥。$./certbot-autocertonly-astandalone\-dseeld.eu-dwww.seeld.eu生成的证书存放在/etc/letsencrypt/live/seeld.eu。注意:'certonly'表示此命令不附带任何特殊插件(例如Apache或Nginx)。'standalone'表示Let'sEncrypt会自动创建一个使用端口80的小型Web服务,以证明您可以控制此域地址。如何从PEM证书制作PKCS12证书证书和私钥分两步生成这一事实足以证明Let'sEncrypt易于使用。Let'sEncrypt生成的证书是PEM格式的,SpringBoot不支持PEM格式的证书。SpringBoot支持PKCS12格式,所以我们需要使用OpenSSL工具将PEM格式的证书和私钥转换为PKCS12格式。PEM证书转换为PKCS12证书的操作如下:1.修改目录路径为/etc/letsencrypt/live/seeld.eu。2.在终端执行以下命令,通过OpenSSL工具将证书和私钥转换为PKCS12格式。server.port:8443security.require-ssl=trueserver.ssl.key-store:/etc/letsencrypt/live/seeld.eu/keystore.p12server.ssl.key-store-password:server.ssl.keyStoreType:PKCS12server.ssl.keyAlias:tomcat文件名为“keystore.p12”的PKCS12格式证书现在存储在“/etc/letsencrypt/live/seeld.eu”目录中。在SpringBoot应用中部署证书我们将在SpringBoot应用中配置证书和私钥,为全面部署HTTPS做准备,以提高SpringBoot应用的安全性。至此,我们已经生成了证书和私钥,并将其转换为PKCS12格式,以便部署到Spring应用中。1.打开'application.properties'文件2.在'application.properties'文件中添加如下配置内容server.port:8443security.require-ssl=trueserver.ssl.key-store:/etc/letsencrypt/live/seeld.eu/keystore.p12server.ssl.key-store-password:server.ssl.keyStoreType:PKCS12server.ssl.keyAlias:tomcat注意:'require-ssl'表示服务器只响应HTTPS请求.如果访问https://seeld.eu:8443,会发现HTTPS服务部署成功,运行正常。为了使项目更加完善,我们额外配置了HTTPS,在80和443端口生效,现在可以访问https://seeld.eu。证书更新Let'sEncrypt证书的有效期仅为90天。有人可能会争辩说,与其他证书提供商颁发的证书的有效期相比,3个月太短了。Let'sEncrypt的决定有两个目的:减少因泄露或错误发布的密钥造成的损害,并鼓励自动化。现在,让我们开始配置证书自动更新。打开Let'sEncrypt客户端(certbot)所在目录注意:证书和密钥存放在同一台服务器上。(请阅读所有章节的注意事项,如安装Python、开放80端口等)执行以下命令开启自动续订功能$sudo./certbot-autorenew该命令会检查本机证书的过期时间服务器(由Let'sEncrypt管理)时间并在证书过期或即将过期时自动更新证书。轻松获取新证书如前所述:SpringBoot不支持PEM格式的证书(由Let'sEncrypt生成)。因此,我们需要将证书通过OpenSSL转换为SpringBoot支持的PKCS12格式的证书。SpringBoot准备工作让我们创建一个PKCS#12密钥。1.将目录路径切换到/etc/letsencrypt/live/seeld.eu。2.在终端执行以下命令,通过OpenSSL工具将证书和私钥转换为PKCS12格式。$opensslpkcs12-export-infullchain.pem\-inkeyprivkey.pem\-outkeystore.p12-nametomcat\-CAfilechain.pem\-canameroot保存文件名为'keystore.p12'的PKCS12格式证书它在“/etc/letsencrypt/live/seeld.eu”目录中。等待!假设服务器正在运行SpringBoot应用程序,这意味着工作还没有全部完成。已过期或过期的'keystore.p12'证书仍然驻留在内存中,因此我们需要重启SpringBoot应用程序才能使上述证书更新生效。简单地重新启动SpringBoot应用程序并非万无一失。可能还有其他方法可以在不重启SpringBoot应用程序的情况下更新证书,但这不在本文的讨论范围之内。总结在本文中,我们学习了如何颁发和更新Let'sEncrypt证书,尤其是在SpringBoot应用程序中部署它们。如果您真的没有其他配置需要调整,您可以在不到5分钟的时间内完成上述所有操作。从这个角度来看,Let'sEncrypt的证书颁发和更新是快速、简单且成本低廉的。无论您需要管理多少Web服务,最好尽快使用HTTPS。译者介绍邱凯,社区编辑,目前就职于北京中捷快递有限公司,担任信息安全工程师。主要负责公司信息安全规划与建设(保险类,ISO27001),主要日常工作内容为安全计划的制定与实施、内部安全审计与风险评估、管理等。