From e53655d573acaa632ff9ee6b6ec1573feb785700 Mon Sep 17 00:00:00 2001 From: LiebeLee <27326628+LiebeLee@users.noreply.github.com> Date: Wed, 3 Jun 2026 23:32:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=84=9A=E6=9C=AC):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20DNS=20API=20=E7=94=B3=E8=AF=B7=E9=9D=9E=E9=80=9A=E9=85=8D?= =?UTF-8?q?=E7=AC=A6=E8=AF=81=E4=B9=A6=E6=97=B6=E4=BB=8D=E7=AD=BE=E5=8F=91?= =?UTF-8?q?=E6=A0=B9=E5=9F=9F=E5=AF=BC=E8=87=B4=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit acmeInstallSSL 在用户回答"是否使用 *.xxx 申请通配符证书 [y/n]" 为 n 时,仍然会向 acme.sh 追加 -d ${dnsTLSDomain},相当于同时 申请子域 + 根域两个证书。这导致使用 dpdns.org、is-a.dev 等 Public Suffix 上的子域时,CF / 阿里云 API 因无权操作根域 zone 直接返回 invalid domain,整体签发失败。 修复:仅当用户选择通配符(y)时才追加根域 -d,n 分支只签发用户 输入的子域。cloudflare 与 aliyun 两个分支同步修复,standalone 分支本就只签单域名,不受影响。 复现: 域名: abc.dpdns.org 选择 DNS API -> cloudflare -> 输入 CF Token 是否使用 *.dpdns.org 通配符 [y/n]: n 日志报错: invalid domain _acme-challenge.dpdns.org --- install.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index d9adf54..b07e186 100644 --- a/install.sh +++ b/install.sh @@ -1876,16 +1876,21 @@ selectAcmeInstallSSL() { # 安装SSL证书 acmeInstallSSL() { local dnsAPIDomain="${tlsDomain}" + local dnsAPIExtraDomain="-d ${dnsTLSDomain}" if [[ "${dnsAPIStatus}" == "y" ]]; then dnsAPIDomain="*.${dnsTLSDomain}" + else + # 用户选择不使用通配符时,只为自己输入的子域申请证书, + # 避免脚本追加根域 -d ${dnsTLSDomain} 导致根域不属于自己(例如 dpdns.org 等公共后缀)时签发失败 + dnsAPIExtraDomain="" fi if [[ "${dnsAPIType}" == "cloudflare" ]]; then echoContent green " ---> DNS API 生成证书中" - sudo CF_Token="${cfAPIToken}" "$HOME/.acme.sh/acme.sh" --issue -d "${dnsAPIDomain}" -d "${dnsTLSDomain}" --dns dns_cf -k ec-256 --server "${sslType}" ${sslIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null + sudo CF_Token="${cfAPIToken}" "$HOME/.acme.sh/acme.sh" --issue -d "${dnsAPIDomain}" ${dnsAPIExtraDomain} --dns dns_cf -k ec-256 --server "${sslType}" ${sslIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null elif [[ "${dnsAPIType}" == "aliyun" ]]; then echoContent green " ---> DNS API 生成证书中" - sudo Ali_Key="${aliKey}" Ali_Secret="${aliSecret}" "$HOME/.acme.sh/acme.sh" --issue -d "${dnsAPIDomain}" -d "${dnsTLSDomain}" --dns dns_ali -k ec-256 --server "${sslType}" ${sslIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null + sudo Ali_Key="${aliKey}" Ali_Secret="${aliSecret}" "$HOME/.acme.sh/acme.sh" --issue -d "${dnsAPIDomain}" ${dnsAPIExtraDomain} --dns dns_ali -k ec-256 --server "${sslType}" ${sslIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null else echoContent green " ---> 生成证书中" sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server "${sslType}" ${sslIPv6} 2>&1 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null