我的想法是申请一个letsencrypt证书并告诉Spring使用该证书。
然而,我不知道如何操作。
谢谢。
我写了两篇关于 Let's Encrypt 和 Spring Boot 的博客文章。
简单来说,步骤如下:
拉取Let's Encrypt 客户端 (certbot)。
为您的域名(例如example.com)生成证书。
./certbot-auto certonly -a standalone -d example.com -d www.example.com
文件将生成在 /etc/letsencrypt/live/example.com
中。Spring Boot 需要 PKCS#12 格式的文件,这意味着您必须将密钥转换为 PKCS#12 密钥库(例如使用 OpenSSL)。如下所示:
/etc/letsencrypt/live/example.com
目录。openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root
`openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root`
现在在/etc/letsencrypt/live/example.com
目录下生成了PKCS12格式的keystore.p12文件。
现在是时候配置你的Spring Boot应用程序了。打开application.properties
文件并将以下属性放入其中:
server.port=8443
security.require-ssl=true
server.ssl.key-store=/etc/letsencrypt/live/example.com/keystore.p12
server.ssl.key-store-password=<your-password>
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat
阅读我的博客文章以获取更多细节和评论。
步骤1:从Git下载Certbot
您需要在指向您的域名地址的服务器上获取Let's Encrypt的源代码。此步骤可能需要几分钟。
$ git clone https://github.com/certbot/certbot
$ cd certbot
$ ./certbot-auto --help
注:必须预先安装Python 2.7.8(或更高版本)。
步骤2:生成证书和私钥
通过在终端中执行以下命令,Let's Encrypt为您生成证书和私钥。
$ ./certbot-auto certonly -a standalone \
-d example.com -d example.com
注意:密钥生成在/etc/letsencrypt/live/example.com目录中。
步骤3:从PEM文件生成PKCS12文件
要将PEM文件转换为PKCS12版本: 进入/etc/letsencrypt/live/example.com 在终端中使用OpenSSL将密钥转换为PKCS12,如下所示。
$ openssl pkcs12 -export -in fullchain.pem \
-inkey privkey.pem \ -out keystore.p12 \ -name tomcat \ -CAfile chain.pem \ -caname root
输入导出密码:
验证 - 输入导出密码:
(注意:逐行书写并按回车键)
步骤4:Spring Boot应用程序的配置
打开您的'application.properties'文件
将此配置放置在其中。
server.port=8443 security.require-ssl=true
server.ssl.key-store=/etc/letsencrypt/live/example.com/keystore.p12
server.ssl.key-store-password= password
server.ssl.keyStoreType= PKCS12
server.ssl.keyAlias= tomcat
另一个选择是使用Spring Boot Starter ACME:
https://github.com/creactiviti/spring-boot-starter-acme
ACME(自动证书管理环境)是由LetsEncrypt用于自动颁发证书的协议。
对于Spring Boot WebFlux,属性的配置已发生更改。
server.port=443
server.ssl.enabled=true//the changed line
server.ssl.keyAlias=netty
server.ssl.key-store=path
server.ssl.key-store-password=password
server.ssl.keyStoreType=PKCS12
server.ssl.enabled
的默认值为 true,因此技术上不需要这个。 - Chrisserver.ssl
属性创建KeyStore(并在其中添加过期的自签名证书)。server.ssl
定义的KeyStore中,并在启用Tomcat HTTPS的连接器上发出reloadSslHostConfigs
。letsencrypt-tomcat 可以在运行时通过 Let's encrypt 查询和刷新证书(无需重新启动)。
它适用于独立和嵌入式 Tomcat 以及 Spring Boot。
它被打包成 Docker 镜像,方便重复使用。镜像包含:
阅读这篇博客文章,了解如何在您的应用程序中使用它以及更多技术细节。
在将 .pem 导出为 .p12 时,我遇到了一些问题,keytool 无法识别文件格式。在经过多次搜索后,我找到了下面这个命令:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root -legacy -passout pass:changeit
之后,您将拥有文件keystore.p12,因此请像Emad Van Ben之前所说的那样在application.properties中设置配置。
keytool
命令将其添加到密钥库中文件应如下所示:
server.port = 8443
server.ssl.key-store = classpath:sample.jks
server.ssl.key-store-password = secret
server.ssl.key-password = password