本文介绍在 CentOS7 环境下,使用 Certbot 申请免费的 Lets Encrypt SSL 证书,并自动续期。

1. 环境准备

安装 Python3:

1
yum install python3

安装 Certbot 和 Python 虚拟环境:

1
2
3
4
5
6
7
8
9
# 假设certbot安装到/root/certbot
mkdir -p /root/certbot
cd /root/certbot
python3 -m venv venv
source venv/bin/activate

# 升级pip
pip install --upgrade pip

阿里云注册并解析的域名,执行如下命令:

1
2
# 安装certbot
pip install certbot certbot-nginx certbot-dns-aliyun -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 阿里云子账号

创建阿里云子账号(https://ram.console.aliyun.com),并分配 AliyunDNSFullAccess 权限。

为子账号生成 access_key 和 access_secret。

创建/root/certbot/aliyun.ini文件,内容如下:

1
2
dns_aliyun_access_key = XXXXX
dns_aliyun_access_key_secret = XXXXX

使用如下命令修改该文件权限:

1
chmod 600 /root/certbot/aliyun.ini

3. 申请证书

以申请 mytools123.com 证书为例:

1
2
3
4
5
/root/certbot/venv/bin/certbot certonly \
-a dns-aliyun \
--dns-aliyun-credentials /root/certbot/aliyun.ini \
-d mytools123.com \
-d "*.mytools123.com"

执行成功后,生成的证书位于/etc/letsencrypt/live/mytools123.com目录

4. 手动续期

Lets Encrypt 的证书有效期只有 3 个月,到期后需要手动续期。

1
2
3
4
5
# --dry-run 的是模拟更新证书
/root/certbot/venv/bin/certbot renew -a dns-aliyun --dns-aliyun-credentials /root/certbot/aliyun.ini --dry-run

# 正式更新证书
/root/certbot/venv/bin/certbot renew -a dns-aliyun --dns-aliyun-credentials /root/certbot/aliyun.ini

5. 自动续期

可以创建定时续期脚本,来实现自动续期。

创建脚本文件/root/renew_cert.sh,内容如下:

1
2
# 更新证书
/root/certbot/venv/bin/certbot renew -a dns-aliyun --dns-aliyun-credentials /root/certbot/aliyun.ini

为 sh 添加可执行权限:

1
chmod +x /root/renew_cert.sh

新建定时任务:

1
crontab -e

新增如下内容:

1
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /root/renew_cert.sh