绑了自定义域名但 SSL 没发:4 个原因 + 对症修复

Vercel / Firebase / Netlify 绑域后 SSL 一直 pending。常见原因:DNS 未完全传播;CAA 记录挡 Let's Encrypt;前置 CDN / 代理(Cloudflare 橙云)截 challenge。先做:用 dig + dnschecker 验 DNS。

你在 Vercel / Firebase / Netlify 绑了自定义域名。控制台显示 “SSL certificate pending”,或者 HTTP 能正常打开但 HTTPS 报 NET::ERR_CERT_AUTHORITY_INVALID。30 分钟过去了,1 小时过去了。Let’s Encrypt(多数平台用)发证需要两个条件成功:(1) DNS 指向平台;(2) 平台成功完成 HTTP-01 或 DNS-01 challenge。绝大多数卡住的 SSL 案例都是其中一项静默失败——DNS 没完全传播、CAA 记录挡了 CA、或者 CDN/代理截了 challenge。

常见原因

按命中率从高到低。

1. DNS 还没传播

平台的发证器要拉 https://yourdomain.com/.well-known/acme-challenge/...。DNS 还没到发证器的 resolver,challenge 就失败。

怎么判断

dig yourdomain.com +short

还没显示平台的 IP/CNAME 就是 DNS 没传播。

2. CAA 记录挡了 Let’s Encrypt

DNS 有 CAA 记录如 0 issue "digicert.com",就只有 DigiCert 能发。Let’s Encrypt 请求被拒。

怎么判断

dig CAA yourdomain.com

看到 CAA 记录且没有允许 letsencrypt.org 就是这条。

3. Cloudflare 代理(橙云)截了 challenge

Cloudflare 代理 DNS 时,平台无法触达源站验证 HTTP-01 challenge。Challenge token 返回的是 Cloudflare 的响应、不是你的平台的,就失败。

怎么判断:Cloudflare DNS 里,apex 域名的 A/CNAME 是橙云(代理中)。初次发证必须关掉。

4. 记录类型跟平台要求不匹配

Vercel apex:A 记录。www:CNAME。Firebase 类似。要求 A 但你设了 CNAME,发证就完不成。

怎么判断:对照平台文档看记录类型。Vercel:apex 必须是 A 76.76.21.21;www 必须是 CNAME cname.vercel-dns.com

5. 平台还没验证域名所有权

某些平台要求显式所有权验证(TXT 记录)才发 SSL。加了域名但跳过了验证,控制台就一直 “pending”。

怎么判断:平台控制台里找 “Verify ownership” 或 “Domain not verified” 提示。

6. AAAA 记录指向别处

A 记录指对了但 AAAA(IPv6)指向旧主机。发证器可能偏好 IPv6 打到错的目标。

怎么判断

dig AAAA yourdomain.com

有 AAAA 指向别处就删或更新。

7. 浏览器的 HSTS preload

浏览器看到旧的 HSTS preload 条目,连临时回退到 HTTP 都拒绝。不直接影响发证,但掩盖了真实状态。

怎么判断:证书发完了浏览器还报 NET::ERR_CERT_AUTHORITY_INVALID。在浏览器里清这个域名的 HSTS。

最短修复路径

第 1 步:用 dig 验证 DNS

dig yourdomain.com +short          # A 记录
dig CNAME www.yourdomain.com +short  # www 的 CNAME

都应返回平台期望的值。还显示旧主机 IP 就是 DNS 没完全到位。

第 2 步:查 CAA

dig CAA yourdomain.com

看到限制性的 0 issue "digicert.com" 这种,要么加 0 issue "letsencrypt.org"、要么删除 CAA 记录(默认”任何 CA 都能发”)。

第 3 步:临时关 Cloudflare 代理

Cloudflare DNS → 根域和 www → 点橙云图标 → 变灰(DNS only)。等 1-2 分钟。在平台控制台重新触发发证。

证书发出后可以重新开代理(橙云)。续签用的是另一套机制,能穿过 Cloudflare。

第 4 步:记录类型严格匹配平台文档

Vercel apex:A 76.76.21.21。Vercel www:CNAME cname.vercel-dns.com。不要给 apex 用 CNAME(DNS 规范上根域名不允许)。

Netlify、Firebase 等严格按它们文档来。别即兴。

第 5 步:重新触发发证

修完 DNS / CAA / 代理后:

  • Vercel:Domain settings → 点 “Refresh”,或者删了重加域名。
  • Netlify:Domain management → “Verify DNS configuration” → “Provision certificate”。
  • Firebase:Hosting → Domains → 等状态更新(没有手动按钮)。

第 6 步:等 15 分钟到 1 小时

多数平台每 5-15 分钟重试一次发证。不要反复删了重加——会重置队列位置。

第 7 步:仍卡住就找平台支持

DNS 正确、CAA 清、代理关后 4+ 小时仍 pending,提工单。附:

  • 域名
  • DNS dig 输出
  • CAA dig 输出
  • 添加域名的时间戳

预防建议

  • 没特别理由不要设 CAA;设了就把平台可能用的所有 CA 都包含(Let’s Encrypt、Sectigo 等)。
  • 初次发证前不要开 Cloudflare 代理。
  • 看平台控制台前先 dig 验证 DNS——DNS 不对,证书发不出。
  • 记录类型严格按平台文档来,不要用 CNAME 替 A。
  • 给新域名维护一份 domain-setup.md runbook,写明你平台的精确步骤。

相关阅读

标签: #排查 #DNS #排查 #SSL