阿里云国内 ECS acme.sh 更新证书出错
最近几天半夜总收到阿里云的域名解析删除通知邮件,感觉 HTTPS 证书更新应该有点问题,上号看一下。因为: acme.sh 现在用被墙的 CloudFlare 和 Google 的 DoH 服务器检查 DNS 是否被设置正确,但是因为这两个服务在国内都被墙了,所以更新证书的程序运行失败了。
在 acme.sh 的 Github Repo 中可以看到:acmesh-official/acme.sh, acme.sh
#domain, type
_ns_lookup() {
if [ -z "$DOH_USE" ]; then
_debug "Detect dns server first."
if _ns_is_available_cf; then
_debug "Use cloudflare doh server"
export DOH_USE=$DOH_CLOUDFLARE
else
_debug "Use google doh server"
export DOH_USE=$DOH_GOOGLE
fi
fi
if [ "$DOH_USE" = "$DOH_CLOUDFLARE" ] || [ -z "$DOH_USE" ]; then
_ns_lookup_cf "$@"
else
_ns_lookup_google "$@"
fi
}
开发者没有留自定义 DoH 服务器的接口,貌似也没留其他查 DNS 的方式。解决倒是很容易:
- 直接在 acme.sh 的参数后加 –dnssleep 300 ,直接假定 DNS 设置正确。当然 300s 很长,可以调小一些。阿里云的 DNS 解析服务调个 20s 左右就可以了。
- 把 acme.sh 里 DoH 服务器的地址换掉,如阿里 DoH :
https://dns.alidns.com/dns-query
或 DNSPod DoHhttps://doh.pub/dns-query
。