acme.sh 自动续期 Let`s Encrypt 证书失败

服务器用的免费的 Les`s Encrypt 证书,自动续期用的 acme。之前一直好好的,但这一个月,阿里云每天都给我发解析变更的邮件通知。但我一直没在意,直到今天网站打不开。

重启服务器,无效。

访问不需要 MySQL 的应用。成功打开。

直接访问 MySQL api。成功。

检查域名,发现浏览器提示证书过期。

进入 /usr/local/acme.sh/ 检查 acme.sh 日志。发现如下记录:

[Fri Mar 12 01:14:30 CST 2021] Return code: 1
[Fri Mar 12 01:14:30 CST 2021] Error renew tony93.top.
[Fri Mar 12 01:14:30 CST 2021] _error_level='1'

然后更新了下 acme:

acme.sh --upgrade

然后 crontab -l 查看续期命令,手动执行:

crontab -l
// 复制显示的脚本命令,粘贴执行
"/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null

可还是续期失败了。

执行 debug 模式。

acme.sh --cron --force --debug 2

在一连串的输出里,找到了失败的原因:acme 将默认 AC 改成了 zerossl。在网上找了一圈,没找到继续使用 let`s encrypt 的方法。没办法,只能按照 acme 的提示,用邮箱注册了 zerossl。

acme.sh --register-account -m xxx@qq.com
// 然后再次执行续期脚本
acme.sh --cron --force --debug 2

这次终于成功了。


再次碰到了更新失败的问题,这次日志显示:dns_ali does not contain dns。

解决方法是:

apt-get update
apt-get install ca-certificates

然后执行 acme 的 renew 就可以:

acme.sh --renew -d your.domain --ecc

这会更新距离到期不足 30 天的证书,其中–ecc 是可选的(使用 ECC 算法申请证书)。如果想强制更新,可以加 –force 参数。