浏览器

NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED:缺少证书透明度凭证

作者: · 最后核实

报错信息NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED

NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED 的意思是:证书来自公开 CA,但 Chrome 找不到它已被公开记录的证明。 证书透明度(CT)要求每张公开信任的证书都记录在公开日志里,让错误签发的证书无处可藏。拿不出有效证明的证书会被拒绝。

先判断是网站的问题还是你电脑的问题

外部检测发现 SCT 缺失,是网站证书的问题;外部检测正常,说明你的网络里有设备出示了另一张证书。用 SSL 检测 查看证书里嵌入的 SCT:

curl ssl.sh/example.com
  • 检测提示缺少 SCT 或 SCT 无效:证书本身有缺陷,网站要换证书,通常是让 CA 重新签发。
  • 检测显示 SCT 正常:你所在的网络里有东西出示了另一张链到公开根、却从未被记录的证书。这是严重的危险信号,不要继续,换个网络试试。

原因

这个错误有 4 种原因,多数是 CA 签发时出了问题,其次是拦截设备用公开链证书冒充网站。

1. CA 签发时没有嵌入 SCT

主流 CA 很少出这种问题,但签发流程配置错误或者走了非常规渠道时会发生。看看证书里有没有 “CT Precertificate SCTs” 扩展:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -text | grep -A4 "CT Precertificate SCTs"

没有任何输出就说明没有嵌入 SCT。

2. SCT 数量不够,或来自不合格的日志

Chrome 的政策要求证书带有一定数量、来自它当前认可的日志的 SCT,具体数量取决于证书有效期。只记录在 Chrome 不认可的日志里的证书会失败。

3. 用公开链证书做拦截

如果某个代理设备不知怎么拿到了公开信任的中间证书,它生成的证书就没有 SCT。Chrome 拦截它,正是为了暴露这种滥用。

4. 电脑时间严重偏慢

设备时间早于 SCT 的时间戳,这些证明看起来就像来自未来。把时间改对。

在各浏览器/系统上的样子

Chrome 内核的浏览器和 Safari 都强制要求 CT,Firefox 只有较新的桌面版执行。

浏览器 显示内容
Chrome / Edge / 360 / QQ 浏览器 “您的连接不是私密连接”,代码 NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED
Safari “此连接非私人连接”,苹果平台执行自己的 CT 政策
Firefox 较新的桌面版已开始执行 CT;老版本会正常打开

站长怎么修

修法是让 CA 重新签发带嵌入 SCT 的证书,部署后确认 SCT 扩展存在。

1. 在 CT 日志里查这张证书。 用 CT 查询 搜你的域名,找不到这张证书就说明它从未被记录。

2. 让 CA 重新签发带嵌入 SCT 的证书,或者换成 ACME CA。主流公开 CA 默认都会嵌入 SCT;在国内代理商处购买的证书,可以联系代理商走 CA 的重签流程:

sudo certbot certonly --nginx -d example.com --force-renewal

3. 部署并验证。 重载服务后,用 curl ssl.sh/example.com 和 证书解析 确认 SCT 扩展存在。

4. 链到私有根的内部域名不需要任何处理。如果确有链到公开根的内部证书需要临时豁免,用企业策略统一配置,不要让员工各自改设置。原理见 证书透明度。

常见问题

SCT 是什么?

签名证书时间戳(SCT)是证书透明度日志给出的承诺:它已经记录了这张证书。浏览器会检查证书是否带有足够多合格日志的 SCT,这样错误签发的证书就藏不住。

公司内部 CA 签的证书没有 SCT,Chrome 会拦吗?

不会。CT 只对链到公开根证书库的证书有要求。链到你自己或 IT 部门在本地安装的根证书的证书,不需要 SCT。

能在 Chrome 里关掉 CT 检查吗?

管理员可以通过企业策略(如 CertificateTransparencyEnforcementDisabledForUrls)为特定内部域名豁免。个人用户不应该关:没有 SCT 的公开证书,正是 CT 要抓出来的东西。

资料来源

  1. Chrome Certificate Transparency Policy
  2. RFC 6962: Certificate Transparency
  3. RFC 9162: Certificate Transparency Version 2.0
  4. Chromium net_error_list.h