引言

由于目前免费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与部署网站 https://www.yiisu.vip/centos_nginx_web.html

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与部署网站 https://www.yiisu.vip/centos_nginx_web.html
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计划任务配置 https://www.yiisu.vip/linux_crontab.html