55

我是保护服务器的新手,所以我对此知之甚少,但我需要让我的 Spring Boot 应用程序在 Digital Ocean Droplet 上运行才能使用 HTTPS。

我的想法是注册一个letsencrypt证书,然后告诉Spring使用它。

但是,我不知道该怎么做。

谢谢。

4

7 回答 7

123

我写了 2 篇关于 Let's Encrypt 和Spring Boot的博文。

  1. 颁发证书。 由 Let's Encrypt 证书保护的 Spring Boot 应用程序
  2. 更新证书让我们加密证书更新:用于 Spring Boot

简而言之,步骤如下:

  1. 拉取Let's Encrypt 客户端(certbot)。

  2. 为您的域生成证书(例如 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)。如下:

  1. 打开 /etc/letsencrypt/live/example.com目录。
  2. `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

阅读我的博客文章以获取更多详细信息和评论。

于 2016-08-10T12:12:51.913 回答
10

第 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

于 2017-02-28T13:12:41.817 回答
7

另一种选择是使用 Spring Boot Starter ACME:

https://github.com/creactiviti/spring-boot-starter-acme

ACME(自动证书管理环境)它是 LetsEncrypt 用于自动颁发证书的协议。

于 2018-03-08T20:30:28.917 回答
2

对于 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
于 2018-06-25T07:26:03.663 回答
1

我用纯 Java 创建了一个小库,它允许 Spring-Boot 中的嵌入式 Tomcat 自动获取并保持 Lets Encrypt 证书新鲜:Spring-Boot LetsEncrypt 助手

它只是一个 Java 文件+ 对 ACME4J/BouncyCastle 的依赖,因此可以将其作为代码重用

简而言之,它执行以下操作:

  1. server.ssl在应用程序启动时,如果 KeyStore 尚不存在(并在那里添加自签名过期证书),它会按照您的属性中的定义创建 K​​eyStore 。
  2. 在端口 80 上为来自 LetsEncrypt 的 HTTP-01 ACME 质询注册 Tomcat 连接器
  3. 启动线程检查 KeyStore 中的证书是否已过期或丢失
  4. 如果证书过期/丢失,它会向 LetsEncrypt 发出命令并在端口 80 上通过 HTTP-01 ACME 质询。
  5. 通过质询后,它将证书存储到定义的 KeyStore 中,并在启用 Tomcat HTTPS 的连接器上server.ssl发出问题reloadSslHostConfigs

通过这些步骤,从颁发到更新的整个 LetsEncrypt 证书生命周期都包含在 Java 应用程序本身中,没有任何非 Java 第三方

于 2021-11-08T07:33:34.353 回答
1

Let'sencrypt-tomcat通过 Let's encrypt在运行时查询刷新证书(无需重新启动)。 它适用于独立和嵌入式 Tomcat 以及 Spring Boot。

它被打包到 Docker 映像中,以便于重用。图像包含:

  • 脱水以通过 Let's Encrypt 管理证书,
  • tomcat-reloading-connector用于在续订后在运行时热重新加载证书,
  • 用于正确处理 tomcat 和脱水进程的初始化系统 ( dumb-init ),
  • 一个启动tomcat并脱水的入口点脚本
  • Tomcat (libtcnative) 使用的 APR 的 Apache Portable Runtime (APR) 和 JNI 包装器的预编译版本,因此 tomcat 提供了可能的最佳 TLS 性能。

阅读这篇文,了解如何在您的应用程序中使用它以及更多关于技术细节的信息。

于 2020-09-26T11:15:41.663 回答
-1
  1. 从letsencrypt获取SSL证书
  2. keytool使用Java中的命令将其添加到密钥库中
  3. 配置您的 Spring 应用程序以使用上面生成的密钥库

该文件应如下所示:

 server.port = 8443
 server.ssl.key-store = classpath:sample.jks
 server.ssl.key-store-password = secret
 server.ssl.key-password = password
于 2016-05-02T21:02:05.617 回答