Certbot生成Lets Encrypt免费证书并配置到Spring Boot

本文涉及的产品
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Certbot生成Lets Encrypt免费证书并配置到Spring Boot

Let's Encrypt是知名的免费SSL证书之一。这里分享一下今天研究的使用certbot工具生成免费ssl证书。

1,连接服务器并安装certbot

连接服务器,按照以下步骤安装certbot

(1) 删除旧的certbot软件包:

sudo apt purge certbot
sudo apt autoremove

(2) 安装相关python环境

sudo apt update
sudo apt install python3 python3-venv libaugeas0

(3) 为certbot创建虚拟python环境

sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip

(4) 安装certbot

sudo /opt/certbot/bin/pip install certbot

(5) 将certbot命令软链接到/usr/bin目录下

sudoln-s /opt/certbot/bin/certbot /usr/bin/certbot

至此,certbot就安装配置完成了!输入certbot --help试试会输出帮助信息。

2,开始手动生成证书

说在前面的是,生成证书需要验证域名(一般是让你在域名解析商添加TXT记录),这里介绍两种域名验证方式:

  1. 手动创建TXT记录验证(如果你直接使用的阿里云等等域名商的域名解析服务的话)
  2. 【推荐】使用Cloudflare API的方式进行验证(如果你的域名是使用的cloudflare进行解析的话)

下面我来一一说明这两种方式,大家根据实际情况选择任意一种即可

(1) 手动验证

执行以下命令:

sudo certbot certonly -d"你的域名"--manual--preferred-challenges dns

-d参数表示域名,可以添加多个域名。

还可以使用泛域名:

sudo certbot certonly -d"你的域名"-d"*.你的域名"--manual--preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

注意,使用泛域名的话,命令后面就多了--server https://acme-v02.api.letsencrypt.org/directory这个参数。

如果要使用泛域名,建议看第二种使用cloudflare的验证方式,否则证书续期会发生错误

例如我的域名是swsk33-web.link,那么生成证书的命令如下:

sudo certbot certonly -d"swsk33-web.link"-d"*.swsk33-web.link"--manual--preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

那么这个证书将会支持swsk33-web.link的访问,也支持xxx.swsk33-web.link的访问(xxx换成任意值)。

然后提示你输入邮箱:

网络异常,图片无法展示
|

输入你的邮箱,回车。

然后提示你是否同意协议:

网络异常,图片无法展示
|

输入y,回车。

然后问你是否想收到其订阅邮件:

网络异常,图片无法展示
|

这个随意,我这里选否,输入n回车。

然后问你是否记录ip,这个必须选是,否则不会生成证书:

网络异常,图片无法展示
|

输入y,回车。

然后会让你给域名添加txt记录:

网络异常,图片无法展示
|

去域名商登录并在域名解析里面按照要求添加TXT记录,然后稍等片刻按回车。

最后,出现下图则成功:

网络异常,图片无法展示
|

添加记录后,可能又会弹出一个让你添加TXT记录的消息,但这个记录名字和值不同,因此再添加这个记录到域名解析即可(也就是说,有时候你可能要添加两次TXT记录)

证书生成在/etc/letsencrypt/live/你的域名目录下。

网络异常,图片无法展示
|

这样,就完成了证书生成。

(2) 使用Cloudflare API的验证方式

由于我是在Dynadot上买的域名并且交给了Cloudflare进行解析,因此我采用第二种方式,使用Cloudflare API的验证非常方便,不需要手动添加TXT记录即可完成验证,并且很好地支持泛域名证书续期,推荐大家可以把域名放在Cloudflare进行解析然后使用这种方式。

使用Cloudflare API方式验证,首先必须保证在Cloudflare上,域名已经解析到了你的服务器的ip地址上,否则会失败。第一次在服务器上生成证书时也会像上面第一种方式一样提示你输入邮箱、同意协议。

首先,我们需要安装certbot-dns-cloudflare插件:

sudo /opt/certbot/bin/pip install certbot-dns-cloudflare

然后我们需要创建一个cloudflare配置文件,先在自己的Cloudflare账户中查看自己的Global API Key:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

将你自己的API Key复制下来保存。

然后在服务器中新建一个配置文件cloudflare.ini,里面写入:

dns_cloudflare_email = 你的cloudflare账户邮箱
dns_cloudflare_api_key = 你的API Key

配置文件名和位置都可以自定义。

然后开始生成证书:

sudo certbot certonly -d"你的域名"--dns-cloudflare--dns-cloudflare-credentials"cloudflare配置文件路径"--dns-cloudflare-propagation-seconds10

如果要生成通配符证书,就如下:

sudo certbot certonly -d"你的域名"-d"*.你的域名"--dns-cloudflare--dns-cloudflare-credentials"cloudflare配置文件路径"--dns-cloudflare-propagation-seconds10--server https://acme-v02.api.letsencrypt.org/directory

上述--dns-cloudflare-propagation-seconds参数表示等待多少秒后开始验证,这里写10s即可。

然后,你就发现证书直接成功生成了!

网络异常,图片无法展示
|

证书同样生成在/etc/letsencrypt/live/你的域名目录下。

3,将PEM证书转换为p12以配置进Spring Boot

先通过下列命令转换证书:

sudoopenssl pkcs12 -export-in"你的证书文件路径"-inkey"你的私钥文件路径"-out"指定生成的p12证书文件路径"

例如我这边:

sudoopenssl pkcs12 -export-in"/etc/letsencrypt/live/swsk33-web.link/cert.pem"-inkey"/etc/letsencrypt/live/swsk33-web.link/privkey.pem"-out"/etc/letsencrypt/live/swsk33-web.link/key.p12"

执行命令会让你设定p12证书的密码,自行设定并记住,待会配置需要用。

这样就生成了!

网络异常,图片无法展示
|

然后打开你的Spring Boot项目的配置文件application.properties,添加如下配置:

# SSL证书设置
server.ssl.key-store=file:刚刚生成的p12证书路径
server.ssl.key-store-password=刚刚生成p12证书时设定的p12证书密码
server.ssl.keyStoreType=PKCS12

例如我的配置:

# SSL证书设置
server.ssl.key-store=file:/etc/letsencrypt/live/swsk33-web.link/key.p12
server.ssl.key-store-password=123456
server.ssl.keyStoreType=PKCS12

启动项目,即可发现你的网站变成https了!

4,续期,吊销

但是这个证书只有三个月有效期,我们需要大致在2个月后进行续期。通过以下命令续期,并重新转换PEM到P12证书:

sudo certbot renew
sudoopenssl pkcs12 -export-in"你的证书文件路径"-inkey"你的私钥文件路径"-out"指定生成的p12证书文件路径"

这里需要说明的是,续期后进行转换时,指定的p12文件路径和密码最好是和第一次生成的路径和密码一致,这样省的我们再去改Spring Boot配置。

如果说证书不需要了,我们可以进行吊销。

注意吊销不是删除证书就行了

sudo certbot revoke --cert-path"/etc/letsencrypt/live/你的证书名(一般就是域名)/cert.pem"

可以通过certbot certificates命令查看自己的证书:

网络异常,图片无法展示
|

例如我吊销证书swsk33-web.link

sudo certbot revoke --cert-path"/etc/letsencrypt/live/swsk33-web.link/cert.pem"

按照提示输入y同意即可吊销。

这个时候,/etc/letsencrypt/live/你的域名目录应该会被删除,如果发现没有删除建议手动删除它。

后续出现问题可以手动删除/etc/letsencrypt再试。

相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
52 0
|
6天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
46 14
|
3天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
21 6
|
5天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
33 3
|
2月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
28天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
47 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
44 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
34 3
|
1月前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
62 8
|
1月前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
144 2