Certbot 通配符 SSL 证书申请和续期指南
1. 安装 Certbot
bash
yum install epel-release -y
yum install certbot -y
2. 安装证书
2.1 下载 DNS API 脚本
bash
git clone https://github.com/yangrongzhou/certbot-letencrypt-wildcardcertificates-alydns-au.git
cd certbot-letencrypt-wildcardcertificates-alydns-au
chmod 0777 au.sh
2.2 配置
2.2.1 domain.ini 配置
- 如果 domain.ini 文件中没有你的根域名,请自行添加
2.2.2 DNS API 密钥配置
需要从域名服务商获取 API 密钥并配置在 au.sh 文件中:
服务商 | 密钥变量 | 申请文档 |
---|---|---|
阿里云 | ALY_KEY 和 ALY_TOKEN | 官方文档 |
腾讯云 | TXY_KEY 和 TXY_TOKEN | 官方文档 |
华为云 | HWY_KEY 和 HWY_TOKEN | 官方文档 |
GoDaddy | GODADDY_KEY 和 GODADDY_TOKEN | 官方文档 |
2.2.3 选择运行环境
支持以下运行环境和场景:
PHP 环境(>4 以上版本均可)
au.sh php aly add/clean
:PHP 操作阿里云 DNSau.sh php txy add/clean
:PHP 操作腾讯云 DNSau.sh php godaddy add/clean
:PHP 操作 GoDaddy DNS
Python 环境(支持 2.7 和 3.7)
au.sh python aly add/clean
:Python 操作阿里云 DNSau.sh python txy add/clean
:Python 操作腾讯云 DNSau.sh python hwy add/clean
:Python 操作华为云 DNSau.sh python godaddy add/clean
:Python 操作 GoDaddy DNS
3. 申请证书
3.1 测试申请(干跑模式)
bash
certbot certonly -d *.lantanhb.com --manual --preferred-challenges dns --dry-run \
--manual-auth-hook "/work/projects/shell/certbot-au/au.sh python txy add" \
--manual-cleanup-hook "/work/projects/shell/certbot-au/au.sh python txy clean"
参数说明:
certonly
:验证模式,只获取证书,不配置 web 服务器--manual
:使用插件--preferred-challenges dns
:采用 DNS 验证申请者合法性--dry-run
:测试模式,不实际申请证书-d
:指定要申请证书的域名--manual-auth-hook
:执行命令时调用 hook 文件--manual-cleanup-hook
:清除 DNS 添加的记录
重要提示:
--manual-auth-hook
和--manual-cleanup-hook
的三个参数:
- 第一个参数:选择语言(php/python)
- 第二个参数:DNS 服务商(aly/txy/hwy/godaddy)
- 第三个参数:固定值(--manual-auth-hook 用 add,--manual-cleanup-hook 用 clean)
3.2 实际申请证书
bash
certbot certonly -d *.lantanhb.com --manual --preferred-challenges dns \
--manual-auth-hook "/work/projects/shell/certbot-au/au.sh python txy add" \
--manual-cleanup-hook "/work/projects/shell/certbot-au/au.sh python txy clean"
3.3 申请多域名通配符证书(SAN 证书)
bash
certbot certonly -d *.example.com -d *.example.org -d www.example.cn \
--manual --preferred-challenges dns \
--manual-auth-hook "/脚本目录/au.sh php aly add" \
--manual-cleanup-hook "/脚本目录/au.sh php aly clean"
4. 续期证书
4.1 续期所有证书
bash
certbot renew --manual --preferred-challenges dns \
--manual-auth-hook "/脚本目录/au.sh php aly add" \
--manual-cleanup-hook "/脚本目录/au.sh php aly clean"
4.2 续期特定证书
查看现有证书:
bash
certbot certificates
续期指定证书(例如 simplehttps.com):
bash
certbot renew --cert-name simplehttps.com \
--manual-auth-hook "/脚本目录/au.sh php aly add" \
--manual-cleanup-hook "/脚本目录/au.sh php aly clean"
5. 设置定时任务
将证书续期加入 crontab:
bash
# 证书有效期<30天才会renew,所以crontab可以配置为1天或1周
# 注意:只有成功renew证书,才会重新启动nginx
1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns \
--deploy-hook "systemctl restart nginx" \
--manual-auth-hook "/脚本目录/au.sh php aly add" \
--manual-cleanup-hook "/脚本目录/au.sh php aly clean"
6.故障排除
- Debug 日志 :操作 DNS API 时遇到问题可查看
/var/log/certd.log
- 权限问题:确保 API token 具有足够的 DNS 操作权限