# 为 47 天证书做准备：SSL 证书缩短有效期迁移清单

> 应对公网证书 200、100、47 天上限和 Let's Encrypt 64、45 天默认有效期：盘点证书、消灭手动上传、ARI、域名验证和监控。

Source: https://ssl.sh/zh/guides/prepare-for-47-day-certificates/
Last updated: 2026-11-10

公网 TLS 证书最长有效期 2029 年 3 月 15 日起降到 47 天，应对办法是盘点所有证书，把每张证书交给自动续期，去掉手动安装步骤，再用外部监控发现续期失败。适用于所有公网受信任的 TLS 证书，不分 CA，内容截至 2026 年 11 月。

## 前提条件

需要能看到所有为你的域名处理 TLS 的地方。

- 你持有的全部注册域名清单。
- 提供这些域名访问的服务器、负载均衡、CDN、面板和设备的管理权限。
- 每个域名的 DNS 管理权限（DNS-01 验证和 CAA 记录需要）。

## 第一步：记住时间节点

公网证书有效期分三步缩短，Let's Encrypt 的默认有效期另有自己的时间表：

| 日期 | 变化 |
|---|---|
| 2026 年 3 月 15 日 | 最长有效期 200 天；域名验证复用 200 天 |
| 2026 年 5 月 13 日 | Let's Encrypt `tlsserver` 配置文件签发 45 天证书（需主动选择） |
| 2027 年 2 月 10 日 | Let's Encrypt 默认（`classic`）改为 64 天；授权复用 10 天 |
| 2027 年 3 月 15 日 | 最长有效期 100 天；域名验证复用 100 天 |
| 2028 年 2 月 16 日 | Let's Encrypt 默认改为 45 天；授权复用 7 小时 |
| 2029 年 3 月 15 日 | 最长有效期 47 天；域名验证复用 10 天 |

完整历史见 [证书有效期时间线](https://ssl.sh/zh/timeline/certificate-validity/)，[有效期计算器](https://ssl.sh/zh/tools/validity-calculator/) 可以算出某个签发日期最长能用到哪天。

## 第二步：盘点所有证书

证书透明度（CT）日志记录了所有公网证书，包括没人记得的那些。先用 [CT 证书查询](https://ssl.sh/zh/tools/ct-search/) 搜索每个域名，再检查线上实际返回的证书：

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

域名多时用 [批量 SSL 检查](https://ssl.sh/zh/tools/bulk-ssl-checker/)。每个主机记录：颁发者、到期时间、TLS 在哪里终止、证书是怎么装上去的。

## 第三步：分类并消灭手动环节

把清单分成三类，重点处理后两类：

1. **ACME 自动化**（Certbot、acme.sh、lego、Caddy、Traefik、cert-manager、win-acme、宝塔/1Panel 自动续签）：确认至少每天运行并支持 ARI，见 [证书自动续期](https://ssl.sh/zh/guides/renew-certificates-automatically/)。
2. **云厂商托管**（CDN 免费证书、负载均衡托管证书、海外云的 ACM 等）：只要 DNS 验证记录还在就会自动续期。
3. **手动**（在阿里云/腾讯云下载后上传到 CDN、负载均衡、OSS/COS，拷到设备上，或靠提醒续期）：换成 ACME 或托管证书；做不到的，在 ACME 部署钩子里调用云厂商 API 自动上传。商业 CA 支持 ACME（EAB）的，让客户端直接对接。

## 第四步：为更短的域名验证复用期做准备

到 2029 年，CA 只能复用 10 天内的域名验证结果，47 天证书每次续期都要重新验证域名。HTTP-01 只要 80 端口一直可访问就能自动完成；国内 80 端口经常不可用，DNS-01 更可靠：给客户端只限该域名的 API 密钥（阿里云 RAM 子账号、腾讯云子用户），或者把 `_acme-challenge` 用 CNAME 委派到专门的验证域，避免主域名的密钥放在服务器上。Let's Encrypt 还宣布了用长期记录完成验证的 DNS-PERSIST-01，是否可用以官方文档为准。

## 验证

流程改好后，测试环境的续期演练能成功完成，线上返回的是自动化流程签发的证书。改完后用 [SSL 证书检查](https://ssl.sh/zh/tools/ssl-checker/) 或终端确认线上证书：

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

ACME 客户端用测试环境演练（`sudo certbot renew --dry-run`，acme.sh 加 `--staging`），不用等到期就能证明流程可行。也可以现在就改用 45 天的 `tlsserver` 配置文件提前演练 2028 年的情况，见 [Let's Encrypt 证书配置文件](https://ssl.sh/zh/guides/lets-encrypt-certificate-profiles/)。

## 自动续期

每张证书的目标状态都一样：定时任务至少每天运行，客户端按 ARI 或实际有效期的比例续期（不写死天数），钩子重载所有相关服务，外部监控确认结果。Let's Encrypt 2025 年 6 月 4 日起不再发到期提醒邮件，所以要有外部检查：[ssl.sh 监控](https://ssl.sh/zh/monitor/)（开发中） 会在到期前提醒，也能发现“续期了但线上没换”的情况。

## 常见问题排查

- **脚本默认 90 天**：写死的 `--days 60`、`renew_before_expiry = 30 days` 或日历提醒，删掉，让客户端自己计算。
- **大量主机同时续期触发限制**：加随机延迟，见 [Let's Encrypt 频率限制](https://ssl.sh/zh/errors/lets-encrypt-rate-limit/)。
- **换 CA 后 CAA 拦截**：把手动证书迁到 ACME 时同步更新 CAA 记录，见 [CAA 记录阻止签发](https://ssl.sh/zh/errors/caa-record-prevents-issuance/)。
- **App 固定了证书**：固定站点证书的 App 每次续期都会出错，改为固定自己控制的公钥或 CA，见 [证书固定](https://ssl.sh/zh/glossary/certificate-pinning/)。
- **被遗忘的主机证书过期**：见 [NET::ERR_CERT_DATE_INVALID](https://ssl.sh/zh/errors/net-err-cert-date-invalid/)，并把它加入监控。
