Skip to content

Certbot实现自动签发及续签Let's Encrypt免费SSL证书

约 924 字大约 3 分钟

SSL证书

2024-09-19

引言

由于目前免费 SSL 证书有效期通常只有 90 天,在到期前需要手动申请、部署证书较为麻烦,甚至会因为未及时续签证书导致网址无法访问。

故而需要一款自动化处理方法,能实现自动签发、自动续签,使用 Certbot 结合 Let's Encrypt 就可以实现该需求。

什么是 Certbot

Certbot 是一款由 Mozilla 维护的开源项目,同时也是由 Electronic Frontier Foundation (EFF) 创建的,它主要用于自动化获取和安装 SSL/TLS 证书,特别是与 Let's Encrypt 服务结合使用时,使得网站的 HTTPS 化变得简单且免费。

什么是 Let's Encrypt

Let's Encrypt 是一个由非营利性组织互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA),旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的 SSL/TLS 证书。

服务器环境说明

1、Linux CentOS 7.x 64 位

2、已安装nginx,示例中 nginx 是通过 yum 的方式进行安装

可参考 CentOS 安装 nginx 与部署网站

3、以下示例代码中的 yourdomain 代表实际需要申请证书的域名,具体实际时请替换为正式域名

4、由于示例中 Certbot 是采用 http-01 方式进行验证,所以yourdomain必须解析至服务器,以便能通过验证

即要先完成域名解析操作,再通过 Certbot 进行证书签发

安装 Certbot

# 安装certbot
yum install certbot

# 安装python-certbot-nginx
yum install python-certbot-nginx

python3-certbot-nginx 是包含 Nginx 插件的包

签发证书

在签发过程中需要保证域名已完成解析,中途会要求输入 email 地址并选择是否同意相关协议。

前提条件:需先完成 nginx 的站点 conf 配置,再进行证书的签发。

可参考 CentOS 安装 nginx 与部署网站

certbot --nginx -d yourdomain

使用 Certbot 的 nginx 插件自动为 nginx 服务器上的 yourdomain 域名获取并安装 SSL/TLS 证书。

通过此方法安装的证书文件通常位于/etc/letsencrypt/live/yourdomain/目录下,包括 fullchain.pem(证书链)和 privkey.pem(私钥)。

由于使用了 nginx 插件,certbot 会自动更改 nginx 对应站点的 conf 配置,无需手动重复更改。

注意:在使用完签发命令后,需重新 nginx 使站点 ssl 配置生效。

systemctl restart nginx

证书续签

Let's Encrypt 的免费证书有效期为 90 天,因此需要定期续订证书以保持其有效性。

模拟续订(测试用)

certbot renew --dry-run

该命令会模拟续订过程,但不会实际更新证书,但是模拟中可能会报错,仅限于参考。

真实续订(正式用)

certbot renew

该命令会检查所有即将过期的证书,并尝试续订。

注意:在使用完签发命令后,需重新 nginx 使站点 ssl 配置生效。

systemctl restart nginx

自动续订(计划任务用)

该命令可以将续订命令添加到 crontab 计划任务中,以实现自动续订,并重启 nginx。

certbot renew --quiet --renew-hook 'sudo systemctl reload nginx'

假设 crontab 计划任务会在每月执行 1 次续订命令,并在续订后重载 Nginx 配置,具体示例如下。

0 0 1 * * certbot renew --quiet --renew-hook 'sudo systemctl reload nginx' > /dev/null 2>&1

可参考 Linux 计划任务配置