排错指南
证书透明度日志里出现了没见过的证书
监控期间,域名下出现了不是本站签发的新证书。
所有受信任 CA 签发的证书都必须提交到公开的证书透明度日志,任何人都能查。这是浏览器的强制要求,目的就是让误签和偷签无处藏身。
所以「你的域名下出现了一张新证书」是一条能被察觉的事实。大多数时候它有正当来源;少数时候,它是你最需要知道的一件事。
按可能性从高到低排查
| 可能性 | 怎么确认 |
|---|---|
| 其他团队自己申请的 | 问一圈运维、前端、某条业务线——最常见的答案 |
| CDN / 云厂商代签 | 接入 CDN、负载均衡、对象存储自定义域名时,厂商会自动签发 |
| 历史采购遗留 | 以前买的商业证书还在自动续期,当事人可能已经离职 |
| 子域名被接管 | 最危险的一种,见下一节 |
确认是自己人申请的之后,在证书上标记为可信,以后它的续期不再提示。
需要警惕的情况:子域名接管
如果一个子域名的 CNAME 指向了已经释放的云资源——下线的对象存储桶、注销的 SaaS 账号、删掉的负载均衡——别人可以重新占用那个资源,然后用你的子域名申请一张合法证书。
- 证书是真的:公开 CA 签发,浏览器完全信任,访客不会看到任何警告。
- 对方可以在这个子域名上放任何内容,拿 Cookie、做钓鱼。
- CT 日志往往是唯一的早期信号。你自己的监控发现不了,因为那个子域名根本不在监控列表里。
dig +short CNAME suspicious.example.com
curl -sI https://suspicious.example.com | head -5发现悬空的 CNAME 就立即删掉解析记录。资源已经释放的情况下,保留解析没有任何用处,只留下一个入口。
怎么减少这类意外
- 加 CAA 记录,限定哪些 CA 可以为这个域名签发。CA 在签发时必须检查它(RFC 8659),这是强制要求,不只是建议。
- 下线服务时先删解析,再释放云资源。顺序反了就会留下悬空记录。
- 把子域名也加入监控,这样它们的证书变化同样会被看到。
另一种情况:当前证书在日志里找不到
如果提示的是当前提供的证书在 CT 日志中找不到,通常说明它由私有 CA 或自签名产生——这类证书不会进入公开日志。
内网服务这样用是正常的。但要知道一个后果:「出现未知新证书」的提醒对这个端点不会生效,因为无法把它和日志里的记录对上。这个功能在这里是失效的,而不是「一切正常」。
常见问题
检测一下你自己的域名
免登录,一次真实的 TLS 握手,直接给出结论:还有多少天到期、证书链是否完整、是否包含这个域名。
需要一张新证书?本站提供基于 Let's Encrypt 的免费签发,支持泛域名。
了解免费证书其他排错指南
- 证书过期了怎么办浏览器拦下访问,提示证书已过期或连接不是私密连接。
- 证书快到期了:先分清是没续期,还是续了没部署证书还没过期,但剩余天数已经不多了。
- 证书还没到生效时间:多半是时钟不对证书的生效时间还没到,被判定为无效。
- 无法连接:证书检测连不上服务器时的排查顺序检测连不上服务器,没能拿到证书。
- 「您的连接不是私密连接」:先找错误代码,再决定修哪里浏览器弹出红色警告拦下访问,但不知道属于哪一种证书问题。
- 关闭 TLS 1.0 / 1.1,只留 1.2 和 1.3服务器还在使用 TLS 1.0 或 1.1 协商连接。
- 证书不包含这个域名:ERR_CERT_COMMON_NAME_INVALID 的几种成因浏览器提示证书不适用于该网站,或者拿到了另一个站点的证书。
- 电脑打得开、手机 App 报证书错误:证书链缺少中间证书电脑浏览器打得开,手机 App、curl 或 Java 客户端却报证书错误。
- OCSP stapling:开了能快一点,不开也不算故障没有启用 OCSP stapling,首次握手会稍慢一些。
- 证书被吊销,或者链验证没通过证书被吊销,或者链验证没有通过。
- 自签名证书:什么时候没问题,什么时候必须换证书是自己签给自己的,浏览器不信任。
- 证书链追溯不到受信任的根:新根交叉签名与私有 CA浏览器打得开,curl、旧安卓或 Java 客户端却说找不到颁发者证书。
- RSA 密钥长度不足:为什么现在才被提醒证书的 RSA 密钥长度低于 2048 位。
- 泛域名证书为什么不覆盖主域名子域名都正常,直接访问主域名却报证书错误。
Last updated on