证书透明度(CT)是一个将每张公开签发的 SSL 证书记录到公开、只可追加的日志中的系统。这意味着任何人都可以查看为任何域名签发了哪些证书——并发现未授权或欺诈性的证书。
CT 由 Google 于 2013 年创建,起因是 CA 为不应签发的域名签发了证书(特别是 2011 年 DigiNotar 事件,该事件导致了伪造的 Google 证书)。自 2018 年起,所有受公开信任的 CA 必须将每张证书提交到 CT 日志。
为什么 CT 很重要
没有 CT 的时代(2018 年之前)
CA 可以为不属于你的域名(如 google.com)签发证书,没人会知道,直到该证书被积极用于攻击。CA 完全基于信任运作。
有了 CT 之后
每张证书都被公开记录。如果 CA 为 google.com 签发了证书,它会在数小时内出现在 CT 日志中。Google(或任何监控方)可以立即发现。
如何查询你域名的 CT 日志
crt.sh —— 最流行的 CT 搜索工具
访问 crt.sh 并输入你的域名。你将看到该域名的所有已签发证书:
- Issuer —— 哪个 CA 签发的
- Not Before / Not After —— 有效期
- SAN —— 证书覆盖的域名
Example results for example.com:
2026-05-08 Let's Encrypt R10 example.com, www.example.com
2026-02-15 Let's Encrypt R10 example.com
2025-11-20 Let's Encrypt R3 example.com, www.example.com
...
命令行搜索
curl -s "https://crt.sh/?q=yourdomain.com&output=json" | jq '.[] | {issuer_name, not_before, not_after, common_name}'
需要关注的异常
- 你没有申请过的证书 —— 可能有人在冒充你的域名
- 意外的 CA —— 如果你只使用 Let’s Encrypt 但看到 DigiCert 的证书,需要调查
- 你没有创建的通配符证书 —— 来自未知来源的
*.yourdomain.com - 你不认识的子域名 —— 你未申请的证书中出现了
secret.yourdomain.com
CT 的技术原理
- CA 签发证书并将其提交到一个或多个 CT 日志
- CT 日志返回 SCT(签名证书时间戳)—— 证明证书已被记录
- SCT 被嵌入证书中(或在 TLS 握手时提供)
- 浏览器验证 SCT —— Chrome 要求证书具有来自至少 2-3 个 CT 日志的有效 SCT
- 任何人都可以监控日志中为其域名签发的证书
CT 日志是只可追加的——证书只能添加,不能删除或修改。这创建了一个可审计的历史记录。
设置 CT 监控
要进行自动化监控,使用在你的域名有新证书签发时发出警报的服务:
| 工具 | 方式 | 费用 |
|---|---|---|
| crt.sh(手动) | 定期搜索 | 免费 |
| Cert Spotter(SSLMate) | 新证书邮件提醒 | 免费套餐 |
| Facebook CT Monitor | 通过 Facebook 工具发出警报 | 免费 |
| Google Certificate Transparency | 搜索 Google 的 CT 日志 | 免费 |
CT 与 GetHTTPS
当你通过 GetHTTPS 获取证书时,Let’s Encrypt 会自动将其提交到多个 CT 日志。你可以在签发后到 crt.sh 搜索你的域名进行验证——你的证书会在几分钟内出现。
这是设计使然——所有证书的公开记录是一项安全特性,而非隐私问题。证书本身(域名、公钥、CA)在 TLS 握手时已经会发送给每个访问者。
常见问题
我能选择不加入证书透明度吗?
对于公开信任的证书,不能。自 2018 年起,所有 CA 必须将证书提交到 CT 日志。浏览器(Chrome、Safari)会拒绝没有有效 SCT 的证书。私有/内部 CA 不受此限制——它们不提交到公开 CT 日志。
CT 会泄露我服务器的 IP 地址吗?
不会。CT 日志包含证书信息(域名、公钥、CA、有效期),但不包含服务器的 IP 地址。DNS 记录会暴露 IP——CT 日志不会增加新的信息。
我发现了一张我没有申请的域名证书,该怎么办?
- 检查签发者——可能是你的主机商的 AutoSSL?
- 检查 SAN——是否包含你认识的域名?
- 如果确实是未授权的,联系签发 CA 请求吊销
- 检查你的 DNS 是否有未授权的更改——有人可能将你的域名指向了他们的服务器
存在多少个 CT 日志?
数十个。主要运营商包括 Google(Argon、Xenon)、Cloudflare(Nimbus)、DigiCert、Sectigo 和 Let’s Encrypt。浏览器要求 SCT 来自多个独立日志,以防止单个被入侵的日志隐藏欺诈证书。