# AWS Amplify 自定义域名 SSL：ACM 证书与排错

> AWS Amplify Hosting 绑定自定义域名：托管证书和导入 ACM 证书的区别、第三方 DNS 要加的记录、CAA 放行亚马逊 CA、通配符子域名，以及 Pending Verification 的处理。

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

AWS Amplify Hosting 用 AWS Certificate Manager（ACM）的证书保护自定义域名，所以签发 CA 是亚马逊。你可以用免费的 Amplify 托管证书，应用托管在 Amplify 期间会自动续期；也可以选一张自己导入到 `us-east-1` 区域 ACM 的证书。Amplify 支持通配符子域名。DNS 在第三方服务商时，要加一条 ACM 验证用的 CNAME、每个子域名一条 CNAME，根域名用 ANAME/ALIAS。

步骤和菜单名称以 Amplify Hosting 和 ACM 官方文档为准（截至 2026 年 11 月），示例用 `example.com` 和 `d111111abcdef8.cloudfront.net`。

## 速查表

| 问题 | AWS Amplify Hosting 的做法 |
|---|---|
| 自动证书的 CA | 亚马逊（ACM 生成） |
| 验证方式 | DNS：一条指向 `acm-validations.aws` 的 CNAME |
| 根域名 `example.com` | `ANAME`/`ALIAS` 指向应用的 CloudFront 地址（或 Route 53 别名） |
| `www` 和其他子域名 | `CNAME` 指向应用的 `cloudfront.net` 地址 |
| CAA 要放行 | `amazon.com`、`amazontrust.com`、`awstrust.com`、`amazonaws.com` 至少一个 |
| 通配符 | 支持通配符子域名，托管证书覆盖所有子域名 |
| 自有证书 | 支持，需放在 `us-east-1` 的 ACM；导入的证书 ACM 不续期 |
| 续期 | 托管证书自动续期 |

## 国内访问说明

这里说的是 AWS 海外区域的 Amplify Hosting，从中国大陆访问的速度和稳定性没有保证。网站主要服务国内用户、需要 ICP 备案的，建议使用国内云（阿里云、腾讯云等）托管静态站点，HTTPS 参考 [阿里云 CDN 配置 HTTPS](https://ssl.sh/zh/guides/aliyun-cdn-https/) 或 [腾讯云 CDN 配置 HTTPS](https://ssl.sh/zh/guides/tencent-cloud-cdn-https/)。

## 第一步：在 Amplify 控制台添加域名

打开应用，在 **Hosting > Custom domains** 里点 Add domain，输入根域名 `example.com`。域名不在 Route 53 时，Amplify 会提议创建托管区域；想继续用阿里云解析、DNSPod 等，就选 Manual configuration。

默认会创建两个条目：`https://example.com` 和 `https://www.example.com`，并把根域名跳转到 `www`。接着选证书：

- **Amplify managed certificate**：免费的默认托管证书；
- **Custom SSL certificate**：从 ACM 里选一张自己的证书。

点 Add domain，然后在 **Actions > View DNS records** 里查看要添加的记录。

## 第二步：添加 DNS 记录

添加域名后要尽快加记录。ACM 会立刻开始检查，而且越往后检查得越少；隔几个小时才加记录，是域名卡在 **Pending Verification** 最常见的原因。

| 用途 | 类型 | 主机记录 | 记录值 |
|---|---|---|---|
| ACM 验证 | `CNAME` | `_c3e2d7eaf1e656b73f46cd6980fdc0e` | `_cjhwou20vhu2exampleuw20vuyb2ovb9.j9s73ucn9vy.acm-validations.aws` |
| `www` | `CNAME` | `www` | `d111111abcdef8.cloudfront.net` |
| 根域名 | `ANAME` 或 `ALIAS` | `@` | `d111111abcdef8.cloudfront.net` |

阿里云解析、DNSPod 会自动在主机记录后补上域名，所以验证记录只填前缀那一段。DNS 服务商不支持 ANAME/ALIAS 时，AWS 强烈建议把 DNS 迁到 Route 53。用 Cloudflare 的话，它的 A 记录只能填 IPv4 地址，Amplify 排错文档建议根域名改用 CNAME（Cloudflare 会自动拉平）。网站已有线上流量的，等域名状态显示 **AVAILABLE** 后再改 `www` 和根域名的记录。第三方 DNS 的所有权验证和生效最长可能要 48 小时。

验证用的 CNAME 要永久保留，被修改或删除后 Amplify 无法续期托管证书。

## 第三步：检查 CAA 记录

域名设了 CAA 的话，至少放行一个亚马逊 CA：

```dns
example.com.  3600  IN  CAA  0 issue "amazon.com"
```

写 `amazontrust.com`、`awstrust.com` 或 `amazonaws.com` 也一样有效。签发时 CAA 出问题，ACM 会报 **One or more domain names have failed validation due to a Certification Authority Authorization (CAA) error**。可以用 [CAA 检测工具](https://ssl.sh/zh/tools/caa-checker/) 确认。

## 通配符和自定义证书

Amplify 支持在自定义域名上配置通配符子域名。在 **Hosting > Custom domains > Domain configuration** 里添加名为 `*` 的子域名并关联到某个分支，`dev.example.com`、`prod.example.com` 这类请求就都会到这个分支。星号必须单独占一整段：`*domain.example.com`、`subdomain.*.example.com` 都不允许。默认情况下，Amplify 签发的托管证书覆盖自定义域名的所有子域名。

使用自有证书的步骤：

1. 从任意 CA 获取证书。Amplify 支持 1024、2048、3072、4096 位 RSA 密钥，以及 256 位 ECDSA（`prime256v1` 曲线）密钥。
2. 在美国东部（弗吉尼亚北部）`us-east-1` 区域的 ACM 中导入或申请证书。
3. 确认证书覆盖你要添加的所有子域名，可以带上 `*.example.com`。
4. 添加或更新域名时选择 **Custom SSL certificate**。

ACM 不会续期导入的证书。到期前在 CA 那里续好，重新导入 ACM，Amplify 会自动刷新这个域名用的证书。托管证书和自定义证书之间可以随时切换。

## 验证

域名状态变成 AVAILABLE 后，`https://example.com` 会返回覆盖该域名的有效证书，托管证书的签发者是亚马逊。用 [SSL 证书检查](https://ssl.sh/zh/tools/ssl-checker/) 检查，或运行：

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

确认 CloudFront 为你的域名返回的证书：

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

托管证书的颁发者是亚马逊。不要直接测 `cloudfront.net` 地址，它会返回 404，因为 Amplify 按主机名路由。

## 续期

只要应用还托管在 Amplify、验证 CNAME 没被动过，托管证书就会自动续期。Amplify 的文档还写着证书有效期 13 个月，但 ACM 文档现在写的是 198 天，这符合 CA/浏览器论坛 SC-081v3 投票规定的 2026 年 3 月 15 日起公开证书最长 200 天。这个上限 2027 年 3 月 15 日降到 100 天，2029 年 3 月 15 日降到 47 天。导入的证书要你自己负责，建议加到 [ssl.sh 监控](https://ssl.sh/zh/monitor/)（开发中）。

## 常见问题排查

- **Pending Verification（第三方 DNS）**：用 `dig` 或 whatsmydns.net 确认 CNAME 能解析。记录存在却解析不出来，联系 DNS 服务商，或者迁到 Route 53。
- **Pending Verification（Route 53）**：注册域名用的名称服务器和托管区域的不一致，改成一致。
- **Pending Verification（多级子域名）**：服务商可能把域名后缀补了两遍。把记录名去掉二级域名和顶级域名试试，比如把 `_hash.docs.backend.example.com` 改成 `_hash.docs.backend`，等 15 到 30 分钟。
- **CNAMEAlreadyExistsException**：这个主机名已经挂在本账号或其他账号的另一个 CloudFront 分配上。先从那边移除；如果刚删除，至少等一小时再重新连接。
- **Additional Verification Required**：ACM 需要更多信息才能处理（比如热门域名），联系 AWS Support。
- **The requested domain cannot be used by this AWS account. Please contact AWS support for assistance.**：属于跨账号关联。添加时带上 `www` 这样的子域名，Amplify 可以自动验证所有权；或者添加 `_amplify-cross-account-ownership-proof` TXT 记录后联系 Support。
- **加了 CAA 之后出现证书或 HTTPS 错误**：ACM 无法更新或重新签发证书。先加上亚马逊的 CAA 值，再删除并重新连接域名（会有停机），或请 Support 重新签发。见 [CAA 记录阻止签发](https://ssl.sh/zh/errors/caa-record-prevents-issuance/)。
