Let's Encrypt 的工作人员在 11 月 10 日 22:02 UTC 确认,正式环境的 API 已经使用 6 个远程验证位置。现在每次验证域名一共发出 7 个请求:主数据中心 1 个,远程位置 6 个,此前远程位置是 4 个。主数据中心和达到规定数量的远程位置都拿到正确的应答,验证才算通过。这项变化在 10 月 15 日预告,10 月 27 日先在测试环境启用。Let's Encrypt 预计对用户几乎没有影响,但有几类配置值得提前检查。

为什么要加位置

从多个网络位置同时验证,是为了防止攻击者用 BGP 劫持把验证流量引到自己那里、骗到别人域名的证书。Let's Encrypt 从 2020 年起就这么做,这次增加位置是因为行业规则收紧:CA/浏览器论坛的基线要求第 3.2.2.9 条规定,从 2026 年 12 月 15 日起,证书机构至少要用 5 个远程网络位置做验证,而且这些位置要分布在至少 2 个不同的区域互联网注册机构的服务区域里,不满足就不得签发。所以其他证书机构也会做类似的调整。

哪些配置可能因此续期失败

  • 按国家或地区屏蔽访问的防火墙和 CDN 规则。验证请求现在来自更多地区,只要有足够多的位置被挡住,验证就会失败。Let's Encrypt 不公布验证用的 IP 地址,而且说明这些地址随时可能变,所以加白名单行不通,可靠的办法是让 /.well-known/acme-challenge/ 这个路径对全球开放。HTTP-01 验证走 80 端口,会跟随跳转到 80 或 443 端口。
  • 只对部分地区应答的权威 DNS,比如分地区解析或带地区限制的 DNS 防火墙。DNS-01 验证要从各个位置都能查到那条 TXT 记录;HTTP-01 验证之前也要先解析域名,同样会受影响。
  • 安全组或防火墙里只放行「几个已知 IP」访问 80 端口的。原因同第一条:验证来源不固定,也不公开。

怎么提前验证

测试环境从 10 月 27 日起就是 6 个远程位置,而 certbot 的演练模式走的正是测试环境,所以在服务器上跑一次 sudo certbot renew --dry-run 就能知道新的验证方式下能不能续期。失败的话,报错里会写明是哪个域名、哪种验证方式没通过,对照上面三条去查。现在检查的另一个理由是续期会越来越频繁:Let's Encrypt 的默认证书有效期将在 2027 年 2 月 10 日缩短到 64 天,见这篇报道,6 天的短期证书见这篇。证书的申请和自动续期见Let's Encrypt SSL 证书配置教程;如果你在 Cloudflare 里设了按国家拦截的规则,记得给验证路径留出例外,Cloudflare 的基本用法见这里。