# Netlify 自定义域名 HTTPS：DNS、CAA 与证书报错

> Netlify 绑定自定义域名并开启 HTTPS：75.2.60.5 和 CNAME 怎么配、CAA 放行 Let's Encrypt、通配符和自定义证书，以及 Waiting on DNS propagation 等报错处理。

Source: https://ssl.sh/zh/guides/netlify-custom-domain-https/
Last updated: 2026-11-10

Netlify 给每个自定义域名免费签发 Let's Encrypt 证书：域名的 DNS 指向 Netlify 后自动申请，Netlify 托管的证书也自动续期。用外部 DNS 时，根域名指向 Netlify 的负载均衡，`www` 指向站点的 `netlify.app` 地址；如果把 DNS 交给 Netlify DNS，还会自动得到一张通配符证书。

步骤和菜单名称以 Netlify 官方文档为准（截至 2026 年 11 月）。站点名 `brave-curie-12345.netlify.app` 和域名 `example.com` 都是示例。

## 速查表

| 问题 | Netlify 的做法 |
|---|---|
| 自动证书的 CA | Let's Encrypt |
| 根域名 `example.com` | ALIAS/ANAME/拉平的 CNAME 指向 `apex-loadbalancer.netlify.com`，或 `A` 记录 `75.2.60.5` |
| `www` 和其他子域名 | `CNAME` 指向 `brave-curie-12345.netlify.app` |
| CAA 要放行 | Let's Encrypt（`letsencrypt.org`） |
| 通配符证书 | 域名使用 Netlify DNS 时自动签发 |
| 上传自有证书 | 支持（Set Custom Certificate），文档未写套餐限制 |
| 续期 | 托管证书自动续期，自定义证书要手动 |

## 国内访问说明

Netlify 的节点都在境外，从中国大陆访问速度和可用性都没有保证，不同地区、不同运营商的体验差别很大。拿来做个人博客、海外产品页可以；如果网站主要服务国内用户，或者业务上需要 ICP 备案，建议放到阿里云、腾讯云等国内云，HTTPS 可以参考 [阿里云 CDN 配置 HTTPS](https://ssl.sh/zh/guides/aliyun-cdn-https/) 或 [腾讯云 CDN 配置 HTTPS](https://ssl.sh/zh/guides/tencent-cloud-cdn-https/)。

## 第一步：添加域名，选好主域名

在站点的 **Domain management** 里添加自定义域名。`www.example.com` 这类额外的名字在 Netlify 里叫域名别名（alias），签发时会把所有别名都放进证书，但前提是每个别名的 DNS 事先都配好了，没配好的会被漏掉。

用外部 DNS 时，Netlify 建议把子域名（比如 `www.example.com`）设为主域名。原因是根域名只能解析到负载均衡的地址，用不上 Netlify CDN 的直接 DNS 路由，而子域名可以。

## 第二步：添加 DNS 记录

根域名指向 Netlify 的负载均衡，`www` 用 CNAME 指向站点的 `netlify.app` 地址。在阿里云解析、DNSPod 或其他 DNS 服务商处添加：

| 类型 | 主机记录 | 记录值 |
|---|---|---|
| `ALIAS`、`ANAME` 或拉平的 `CNAME` | `@` | `apex-loadbalancer.netlify.com` |
| `A`（服务商不支持上面几种时） | `@` | `75.2.60.5` |
| `CNAME` | `www` | `brave-curie-12345.netlify.app` |

根域名上只保留这一条记录。Netlify 的排错文档指出：根域名上多余的 `A` 记录和残留的 `AAAA` 记录都会导致证书签不下来，因为它的负载均衡不支持 IPv6。如果改用 Netlify DNS，要确认注册商处的 NS 已经换成 Netlify 的，并且先关掉 DNSSEC，Netlify DNS 不支持 DNSSEC。

用下面的命令确认外界看到的结果，`AAAA` 那条应该什么都不返回：

```bash
dig +short example.com A
dig +short example.com AAAA
dig +short www.example.com CNAME
```

## 第三步：检查 CAA 记录

没有 CAA 记录就不受限制。如果有 CAA，必须放行 Let's Encrypt，否则签发失败。想只允许 Netlify 自己的 Let's Encrypt 账户签发，可以照 Netlify 文档带上 `accounturi`：

```dns
example.com.  300  IN  CAA  0 issue "letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/54403714"
```

写成普通的 `0 issue "letsencrypt.org"` 也可以，只是任何 Let's Encrypt 账户都能签。同一域名下还有其他业务用别家 CA 的（比如阿里云上的 DigiCert 证书），要另外加对应的 `issue` 记录。可以用 [CAA 记录生成器](https://ssl.sh/zh/tools/caa-generator/) 生成、用 [CAA 检测工具](https://ssl.sh/zh/tools/caa-checker/) 验证。

## 通配符证书和自定义证书

域名使用 Netlify DNS 时，Netlify 会自动签通配符证书，这个域名下所有 Netlify 站点的子域名都能立刻用上 HTTPS。同一个域名下超过 5 个子域名别名时，可能撞上 CA 的频率限制，Netlify 建议在添加别名之前就上传自己的通配符证书，或者先联系支持。

安装自有证书：进入 **Domain management > HTTPS**，选择 “Set Custom Certificate”，准备好三样东西：

- X.509 PEM 格式的证书（通常是 .crt 文件）；
- 申请证书时用的私钥，不能加密码；
- CA 提供的中间证书链。

Netlify 会检查证书和站点域名是否匹配、DNS 是否指向 Netlify，然后安装。通配符或多域名证书装在一个站点上，会自动用于它覆盖的其他站点。自定义证书不会自动续期，到期前要在 CA 那边续好重新安装，或者换回 Netlify 托管证书。

## 验证

配置正确时，颁发者是 Let's Encrypt，SAN 列表里同时有 `example.com` 和 `www.example.com`。用 [SSL 证书检查](https://ssl.sh/zh/tools/ssl-checker/) 从外部检查，或者在终端运行：

```bash
curl ssl.sh/example.com
```

再看服务器实际发出的证书：

```bash
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -issuer -subject -ext subjectAltName -dates
```

控制台 **Domain management > HTTPS** 里也能看到证书状态。

## 自动续期

Netlify 托管证书会按需自动生成和续期，前提是 DNS 一直指向 Netlify、CAA 一直放行 Let's Encrypt。Let's Encrypt 从 2025 年 6 月 4 日起不再发到期提醒邮件，默认有效期也会在 2027 年 2 月 10 日缩短到 64 天、2028 年 2 月 16 日缩短到 45 天。自定义证书和重要域名建议加到 [ssl.sh 监控](https://ssl.sh/zh/monitor/)（开发中）。

## 常见报错和处理

Netlify 签不出证书，绝大多数是 DNS 记录配错了。以下提示文字来自 Netlify 的排错文档：

- **We could not provision a Let's Encrypt certificate for your custom domain**：依次检查根域名的 A/ALIAS 记录、`www` 的 CNAME、`AAAA` 记录、DNSSEC 和 CAA，改好后重新申请。
- **Waiting on DNS propagation**（超过 48 小时）：Netlify 要等全球都解析到正确记录。其他地方还缓存着旧记录时，只能等 TTL 过期，可以用多个公共 DNS 对比结果。
- **DNS verification failed**：记录指向了别处。如果站点前面还套了 Cloudflare 代理之类的服务，要先关掉，Netlify 必须自己终止 TLS 才能签证书。
- **Missing certificate**，或点 “Provision certificate” 后没反应：通常还是上面这些 DNS 问题，用 Let's Debug 测一下域名。
- **Your domain doesn't appear to be served by Netlify**：域名解析到了别的主机，按第二步改记录。
- **Certificate provisioning has been pending for over 24 hours**：Netlify 前 24 小时每 10 分钟重试一次，之后两天每小时一次。超过 24 小时还没证书，基本可以断定是 DNS 配错了。
- **HTTPS not working or showing "connection not secure" warnings**：有时证书只签到了 `example.com`，没签到 `www.example.com` 或某个别名。点 “Renew certificate” 一般能解决，不行就找支持修复。也可以参考 [NET::ERR_CERT_COMMON_NAME_INVALID](https://ssl.sh/zh/errors/net-err-cert-common-name-invalid/)。
- **example.com is not resolvable with a resolver that validates DNSSEC**：用 Netlify DNS 时注册商或旧 DNS 那边还开着 DNSSEC。去那边关掉（DNSViz 能看出是哪一层开的），或者保留 DNSSEC、改用外部 DNS。

CAA 报错见 [CAA 记录阻止签发](https://ssl.sh/zh/errors/caa-record-prevents-issuance/)。都试过还不行，就带上站点名、用的是外部 DNS 还是 Netlify DNS、已经试过的步骤去联系 Netlify 支持。
