自动续签新方案,经验证比原有手动续签更为方便。
解决方案
方案 1:改用非 manual 插件(推荐)
如果域名已解析到当前服务器,改用 --nginx
或 --webroot
方式重新获取证书(替换原有配置):
bash
复制
下载
# 删除原有手动获取的证书配置 sudo rm -rf /etc/letsencrypt/renewal/{apilink,video}.haotunet.com.conf # 使用 nginx 插件重新获取证书 sudo certbot --nginx -d apilink.haotunet.com -d video.haotunet.com
优点:后续可自动续签,无需手动干预。
方案 2:为 manual 方式添加 auth-hook(适合无法开放 80/443 端口的情况)
如果必须使用 --manual
方式(如域名未解析到当前服务器),需编写 DNS 验证脚本:
bash
复制
下载
# 1. 创建验证脚本(示例:Cloudflare API) echo '#!/bin/bash echo "$CERTBOT_VALIDATION" > /tmp/certbot_validation.txt # 调用你的 DNS API 添加 TXT 记录(需自行实现) ' | sudo tee /etc/letsencrypt/renewal-hooks/manual-auth-hook sudo chmod +x /etc/letsencrypt/renewal-hooks/manual-auth-hook # 2. 手动续签测试 sudo certbot renew --manual --manual-auth-hook /etc/letsencrypt/renewal-hooks/manual-auth-hook --dry-run
注意:需根据你的 DNS 提供商(如阿里云、Cloudflare)实现脚本逻辑。
方案 3:手动强制续签(临时解决)
bash
复制
下载
# 强制手动续签(需交互式操作) sudo certbot certonly --manual -d apilink.haotunet.com -d video.haotunet.com
按提示完成 DNS TXT 记录验证。
验证修复结果
重新运行测试:
sudo certbot renew --dry-run
确认所有证书均显示 (success)
。
关键排查命令
- 查看证书获取方式:bash复制下载sudo cat /etc/letsencrypt/renewal/apilink.haotunet.com.conf | grep “authenticator”
- 如果输出
authenticator = manual
,说明是手动方式获取。
- 如果输出
- 检查日志详情:bash复制下载sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
总结
问题类型 | 解决方案 |
---|---|
手动插件 (manual ) 证书续签失败 | 改用 --nginx /--webroot 或添加 --manual-auth-hook |
自动插件证书续签成功 | 无需操作,Cron 会定期自动续签 |
推荐优先使用方案 1(改用 --nginx
),避免后续维护麻烦。如果域名无法解析到服务器,再考虑方案 2(需编写 DNS API 脚本)。