自动续签新方案,经验证比原有手动续签更为方便。

解决方案

方案 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)


关键排查命令

  1. 查看证书获取方式:bash复制下载sudo cat /etc/letsencrypt/renewal/apilink.haotunet.com.conf | grep “authenticator”
    • 如果输出 authenticator = manual,说明是手动方式获取。
  2. 检查日志详情:bash复制下载sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log

总结

问题类型解决方案
手动插件 (manual) 证书续签失败改用 --nginx/--webroot 或添加 --manual-auth-hook
自动插件证书续签成功无需操作,Cron 会定期自动续签

推荐优先使用方案 1(改用 --nginx),避免后续维护麻烦。如果域名无法解析到服务器,再考虑方案 2(需编写 DNS API 脚本)。