CentOS7下自动更新DNSPOD域名的Let'sEncrypt泛域名证书

按照https://certbot.eff.org/instructions?ws=nginx&os=centosrhel7的指引操作:

1、安装snapd
yum install epel-release
yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
snap install core; snap refresh core

2、安装CertBot
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

3、获取证书,配置站点,启用SSL
certbot --nginx

4、查看自动更新定时器
systemctl list-timers

5、删除证书
certbot delete

6、泛域名支持
6.1 下载 certbot-auth-dnspod

6.2 修改certbot-auth-dnspod
6.2.1 修改
DOMAIN=$(expr match "$CERTBOT_DOMAIN" '.*\.\(.*\..*\)')
TXHOST=$(expr match "$CERTBOT_DOMAIN" '\(.*\)\..*\..*')


CERTBOT_DOMAIN=${CERTBOT_DOMAIN/\*\./}
DOMAIN=$(echo $CERTBOT_DOMAIN | rev | cut -d'.' -f -2 | rev)
TXHOST=$(echo $CERTBOT_DOMAIN | rev | cut -d'.' -f 3- | rev)
SUFFIX=$(echo $CERTBOT_DOMAIN | rev | cut -d'.' -f 2 | rev)
if [[ "$SUFFIX" = "com" || "$SUFFIX" = "net" || "$SUFFIX" = "org" || "$SUFFIX" = "gov" || "$SUFFIX" = "edu" ]]; then
DOMAIN=$(echo $CERTBOT_DOMAIN | rev | cut -d'.' -f -3 | rev)
TXHOST=$(echo $CERTBOT_DOMAIN | rev | cut -d'.' -f 4- | rev)
fi

否则类似domain.com.cn这样的域名不能正确识别

6.2.2 修改
-d "$PARAMS&domain=$DOMAIN&record_id=$RECORD_ID" \
改为
-d "$PARAMS&domain=$DOMAIN&record_id=$RECORD_ID&lang=en" \
否则执行时会提示错误

6.3 配置DNSPOD API
DNSPOD上得到的ID和Token保存入配置文件
echo "ID,Token" > /etc/dnspod_token

6.4 获取证书
certbot certonly --manual --preferred-challenges dns-01 --email yourname@domain.com --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook /path/to/certbot-auth-dnspod.sh --manual-cleanup-hook "/path/to/certbot-auth-dnspod.sh clean" -d domain.com -d *.domain.com

可以设置命令别名

vi ~/.bashrc

添加

alias getcert='certbot certonly --manual --preferred-challenges dns-01 --email yourname@domain.com --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook /path/to/certbot-auth-dnspod.sh --manual-cleanup-hook "/path/to/certbot-auth-dnspod.sh clean"‘

以后就可以用简化的命令来更新证书了

getcert -d domain.com -d *.domain.com

6.5 修改nginx的站点配置文件,指向新证书

 

参考:https://www.xiaocaicai.com/2021/04/使用lets-encrypt和dnspod来自动获取ssl证书/