证书透明是什么
证书透明(Certificate Transparency,CT)要求公共 CA 把签发的证书提交到只可追加的公开日志,并拿到一份签名时间戳(SCT)作为提交凭证。证书只有附带足量有效 SCT 才会被浏览器接受,这样任何误签发都会留下公开痕迹,域名持有者与研究者都能发现。它解决的是「CA 被攻破或违规签发,外界毫不知情」的问题,属于公共 PKI 的监督机制,自建内网 CA 不涉及。
基本信息
| 标准 | RFC 6962(v1)、RFC 9162(v2) |
|---|---|
| SCT 交付方式 | 证书扩展、TLS 握手扩展、OCSP 响应三种 |
| 嵌入证书的格式 | 只支持 v1;握手与 OCSP 中可出现 v2 |
| 浏览器要求 | Chrome 等要求公共信任证书带足量有效 SCT |
| 主要用途 | 查询域名历史证书、发现误签发、监控异常签发 |
典型使用场景
- 上线前检查:确认新签发的公网证书带够 SCT,避免浏览器直接报错。
- 资产清点:用日志查询某个域名历史签发过哪些证书,找出被遗忘的旧证与旧子域。
- 误签发监控:定期比对自己资产在日志中的记录,发现未授权的签发方。
- 迁移与交接:域名转入新团队时,用日志确认没有遗留证书仍在生效。
- 取证排查:怀疑证书被替换时,用日志时间线核对签发行为。
SCT 交付方式对比
| 交付方式 | 位置 | 注意事项 |
|---|---|---|
| 证书扩展 | CA 把 SCT 列表写回证书里 | 最直观,openssl 直接可见 |
| TLS 握手扩展 | 服务端在握手时单独发送 SCT 列表 | 由服务端配置决定,需确认已开启 |
| OCSP 响应 | 随吊销查询响应一并返回 | 依赖 OCSP 通道可用 |
| 预证书 | 带 poison 扩展的提交版本 | 只在日志与调试工具中出现,不装入服务端 |
检查 SCT 与日志记录
检查 SCT 与日志记录
openssl x509 -in cert.pem -noout -text | grep -A2 'CT Precertificate' | head # 看 SCT 内容
openssl x509 -in cert.pem -noout -text | grep -c 'Signed Certificate Timestamp' # 数 SCT 条数
# 查询某域名在公开日志中的历史记录(会把域名提交给第三方服务,注意合规)
# curl -s 'https://crt.sh/?q=example.com&output=json' | head -40自建内网 CA 签发的证书不涉及 CT,也不需要 SCT。判断依据是证书是否面向浏览器信任的公共 CA 体系。