背景
用certbot --manual申请的 Let's Encrypt 证书,不会自动续期。每次快到期都要手动加 TXT 记录,90 天后就抓瞎。
改成用 DNSPod API 自动验证,一次性配置,从此不用管。
原因
certbot --manual模式,续期时需要你手工在 DNS 里加一条 TXT 记录。certbot 自己加不了。
想要自动化,必须让 certbot调 API 加记录。这就需要:
有 DNSPod 的 API 权限
装一个能调 API 的 certbot 插件
解决
1. 装插件
DNSPod 有两套 API,对应两个插件,别装错:
| 密钥类型 | 该装的插件 |
|---|---|
腾讯云 API 3.0(SecretId 以AKID开头) | certbot-dns-dnspod-109 |
| DNSPod 老版 Token(纯字符) | certbot-dns-dnspod |
sudo pip3 install --break-system-packages certbot-dns-dnspod-1092.申请腾讯云 API 密钥
访问https://console.cloud.tencent.com/cam/capi
推荐用子用户,只授予
QcloudDNSPodFullAccess权限,别用主账号密钥。
拿到SecretId(AKID 开头)+SecretKey。
3.写凭证文件
sudo mkdir -p /root/.secrets/certbot sudo tee /root/.secrets/certbot/dnspod-109.ini > /dev/null <<'EOF' dns_dnspod_109_secret_id = YOUR_SECRET_ID dns_dnspod_109_secret_key = YOUR_SECRET_KEY EOF sudo chmod 600 /root/.secrets/certbot/dnspod-109.ini sudo chmod 700 /root/.secrets /root/.secrets/certbot4.用新插件重新申请证书
sudo certbot certonly \ --authenticator dns-dnspod-109 \ --dns-dnspod-109-credentials /root/.secrets/certbot/dnspod-109.ini \ --cert-name YOUR_DOMAIN \ -d YOUR_DOMAIN \ --agree-tos --no-eff-email提示Renewing an existing certificate时选2(Renew & replace)。
5.测试
sudo certbot renew --dry-run看到这句就成功了:
Congratulations, all simulated renewals succeeded全程没有手动加一条 TXT 记录——certbot 自动调 DNSPod API 加、验证、删除。
验证配置生效
sudo cat /etc/letsencrypt/renewal/YOUR_DOMAIN.conf | grep authenticator从manual变成dns-dnspod-109,就对了。
三个坑
坑 1:把腾讯云 API 密钥填给老插件。老插件只认 DNSPod 传统 Token(纯字符格式),填 AKID 开头的会报
401。坑 2:DNSPod 传统 Token 写凭证文件,格式是三个字段独立成行:
dns_dnspod_api_id = 数字 dns_dnspod_api_token = 纯字符 dns_dnspod_email = 你的邮箱不能写成
token = "ID,TOKEN"这种引号+逗号的形式,会报Parsing failed。坑 3:一定先跑
--dry-run。它会真的走一遍续期流程,但不消耗 Let's Encrypt 的配额。测通再等真正的续期。