fix(脚本): 修复 DNS API 申请非通配符证书时仍签发根域导致失败的问题

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
This commit is contained in:
LiebeLee
2026-06-03 23:32:59 +08:00
parent b87cc03a40
commit e53655d573
+7 -2
View File
@@ -1876,16 +1876,21 @@ selectAcmeInstallSSL() {
# 安装SSL证书 # 安装SSL证书
acmeInstallSSL() { acmeInstallSSL() {
local dnsAPIDomain="${tlsDomain}" local dnsAPIDomain="${tlsDomain}"
local dnsAPIExtraDomain="-d ${dnsTLSDomain}"
if [[ "${dnsAPIStatus}" == "y" ]]; then if [[ "${dnsAPIStatus}" == "y" ]]; then
dnsAPIDomain="*.${dnsTLSDomain}" dnsAPIDomain="*.${dnsTLSDomain}"
else
# 用户选择不使用通配符时,只为自己输入的子域申请证书,
# 避免脚本追加根域 -d ${dnsTLSDomain} 导致根域不属于自己(例如 dpdns.org 等公共后缀)时签发失败
dnsAPIExtraDomain=""
fi fi
if [[ "${dnsAPIType}" == "cloudflare" ]]; then if [[ "${dnsAPIType}" == "cloudflare" ]]; then
echoContent green " ---> DNS API 生成证书中" 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 elif [[ "${dnsAPIType}" == "aliyun" ]]; then
echoContent green " ---> DNS API 生成证书中" 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 else
echoContent green " ---> 生成证书中" 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 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