阿里云国内 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 的方式。解决倒是很容易:

  1. 直接在 acme.sh 的参数后加 –dnssleep 300 ,直接假定 DNS 设置正确。当然 300s 很长,可以调小一些。阿里云的 DNS 解析服务调个 20s 左右就可以了。
  2. 把 acme.sh 里 DoH 服务器的地址换掉,如阿里 DoH :https://dns.alidns.com/dns-query 或 DNSPod DoH https://doh.pub/dns-query