我是保护服务器的新手,所以我对此知之甚少,但我需要让我的 Spring Boot 应用程序在 Digital Ocean Droplet 上运行才能使用 HTTPS。
我的想法是注册一个letsencrypt证书,然后告诉Spring使用它。
但是,我不知道该怎么做。
谢谢。
我是保护服务器的新手,所以我对此知之甚少,但我需要让我的 Spring Boot 应用程序在 Digital Ocean Droplet 上运行才能使用 HTTPS。
我的想法是注册一个letsencrypt证书,然后告诉Spring使用它。
但是,我不知道该怎么做。
谢谢。
我写了 2 篇关于 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`
带有 PKCS12的文件keystore.p12现在生成在 /etc/letsencrypt/live/example.com
.
是时候配置您的 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-auto --help
备注:需预先安装 Python 2.7.8(或以上)。
Step2:生成证书和私钥
通过在您的终端中执行以下命令,Let's Encrypt 会为您生成证书和私钥。
$ ./certbot-auto certonly -a 独立的 \
-d example.com -d example.com
备注:密钥在 /etc/letsencrypt/live/example.com 目录中生成
Step3:从 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
输入导出密码:
验证 - 输入导出密码:
(注意:- 一次写一行,然后按回车)
Step4: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=密码
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
我用纯 Java 创建了一个小库,它允许 Spring-Boot 中的嵌入式 Tomcat 自动获取并保持 Lets Encrypt 证书新鲜:Spring-Boot LetsEncrypt 助手
它只是一个 Java 文件+ 对 ACME4J/BouncyCastle 的依赖,因此可以将其作为代码重用
简而言之,它执行以下操作:
server.ssl
在应用程序启动时,如果 KeyStore 尚不存在(并在那里添加自签名过期证书),它会按照您的属性中的定义创建 KeyStore 。server.ssl
发出问题reloadSslHostConfigs
通过这些步骤,从颁发到更新的整个 LetsEncrypt 证书生命周期都包含在 Java 应用程序本身中,没有任何非 Java 第三方
Let'sencrypt-tomcat通过 Let's encrypt在运行时查询和刷新证书(无需重新启动)。
它适用于独立和嵌入式 Tomcat 以及 Spring Boot。
它被打包到 Docker 映像中,以便于重用。图像包含:
阅读这篇博文,了解如何在您的应用程序中使用它以及更多关于技术细节的信息。
keytool
使用Java中的命令将其添加到密钥库中该文件应如下所示:
server.port = 8443
server.ssl.key-store = classpath:sample.jks
server.ssl.key-store-password = secret
server.ssl.key-password = password