CT 是什么
证书透明度(Certificate Transparency,CT)要求 CA 把签发的每张公共可信证书提交到公开的、只可追加的日志中,并返回 SCT(Signed Certificate Timestamp,签名证书时间戳)。任何人都能审计这些日志,从而发现误签发或恶意签发的证书。Chrome 等浏览器要求公共可信证书携带足够的 SCT 才接受(RFC 6962 定义 CT v1,RFC 9162 为 CT v2)。
基本信息
| 机制 | 每张公共证书提交到多个公开日志,可被任何人审计 |
|---|---|
| SCT | 签名证书时间戳,可嵌入证书、随握手或经 OCSP 下发 |
| 规范 | RFC 6962(CT v1)、RFC 9162(CT v2) |
| 适用范围 | 公共可信 CA 签发的证书 |
| 内网自建 CA | 不需要 CT,也不受浏览器 SCT 要求约束 |
| 监控价值 | 订阅日志可发现他人为你的域名申请了证书 |
典型使用场景
- 证书排障:浏览器提示证书缺少透明度信息时定位原因
- 品牌保护:订阅 CT 日志,第一时间发现别人给你的域名申请了证书
- 安全审计:确认所用 CA 与证书链是否合规、SCT 数量是否足够
- 自建 PKI 说明:解释内网证书为什么不需要 CT
- 供应链排查:确认 CDN 或第三方服务实际使用的证书来源
- 事件响应:证书被误签发后,日志是取证与撤销的依据入口
查看 SCT
查看 SCT
# 观察握手中是否下发 SCT 扩展(-tlsextdebug 会打印扩展细节)
openssl s_client -connect example.com:443 -tlsextdebug </dev/null 2>&1 | grep -i -A3 'signed certificate timestamp'
# 查看证书里是否嵌入 SCT 扩展
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -text | grep -i -A2 'CT Precertificate SCTs'SCT 的交付方式
| 方式 | 位置 | 特点 |
|---|---|---|
| 证书内嵌 | X.509 扩展 | 最稳定,需要 CA 支持 |
| TLS 扩展 | 握手时下发 | 现代服务器的常见形式 |
| OCSP 装订 | OCSP 响应中携带 | 需装订真正生效,失败可能被判缺失 |
| 仅日志可查 | 日志中存在但握手未交付 | 浏览器仍可能拒绝连接 |
Chrome 只对公共可信证书强制要求 SCT;内网自建 CA 签发的证书是否带 SCT 没有实际意义。
CT 日志只证明「某个 CA 签发过这张证书」,不代表域名所有者知情或同意,因此它是发现问题的线索而不是授权证明。
用公开的日志聚合查询服务订阅自己的域名,可以在证书签发后很快收到提醒,成本极低,是性价比很高的品牌防护手段。