# 证书透明度是什么？定义、例子与常见误区

> 证书透明度（CT）是一套公开、只可追加的日志系统，记录所有公开信任的 TLS 证书，让任何人都能审计 CA 签发了什么。

Source: https://ssl.sh/zh/glossary/certificate-transparency/
Last updated: 2026-11-10

证书透明度（CT）由 [RFC 6962](https://www.rfc-editor.org/rfc/rfc6962) 定义，RFC 9162 是它的第二版。它要求 CA 把证书提交到公开的 [CT 日志](https://ssl.sh/zh/glossary/ct-log/)；日志以 Merkle 树组织，只能追加、不能改写。日志收到证书后返回 [SCT](https://ssl.sh/zh/glossary/sct/)（签名证书时间戳）作为收录承诺，SCT 一般直接嵌在证书里，也可以在握手时下发。监控方持续观察这些日志，任何人都可以检索。

## 为什么重要
没有 CT 的年代，某家 CA 给你的域名签了证书，除非被用于攻击，否则几乎没人知道。现在浏览器会拒绝没有有效 SCT 的证书：Chrome 要求 2018-04-30 之后签发的证书必须记入 CT，Apple 要求 2018-10-15 之后签发的证书必须记入。这样一来，[错误签发](https://ssl.sh/zh/glossary/misissuance/)无处隐藏，根证书计划决定是否继续信任某家 CA 时也有据可查，域名所有者能及时发现不是自己申请的证书。

## 例子
检查证书里是否嵌有 SCT：

```bash
openssl x509 -in cert.pem -noout -text | grep -A3 "CT Precertificate SCTs"
```

想查看 example.com 及其子域名历史上签发过的所有证书，可以使用 CT 检索工具。安全研究人员和攻击者也常用这种方法枚举子域名。

## 常见误区
- **CT 能阻止错误签发。** 它只让签发过程公开可查，真正的预防靠 CAA、验证规则和审计。
- **证书只在内网用，域名就不会泄露。** 只要是公开信任的证书都会进入 CT 日志，SAN 里的域名随之公开；不想暴露的内部域名，请改用通配符证书或私有 CA。
- **CT 只和 CA 有关。** 受益最多的其实是域名所有者，可以通过监控日志发现异常证书。

## 相关术语

- [CT 日志](https://ssl.sh/zh/glossary/ct-log/): CT 日志是由独立运营方维护、可公开审计且只可追加的服务器，用 Merkle 树记录证书，并签发承诺收录的时间戳。
- [SCT](https://ssl.sh/zh/glossary/sct/): SCT 是 CT 日志签发的承诺凭证，表示它会把某张证书收录进公开日志，浏览器以此确认证书已提交记录。
- [预证书](https://ssl.sh/zh/glossary/precertificate/): 预证书是 CA 在正式签发前提交到 CT 日志的证书副本，带有“毒化”扩展而无法使用，用来换取 SCT。
- [错误签发](https://ssl.sh/zh/glossary/misissuance/): 错误签发是指 CA 违反 Baseline Requirements 或根证书计划政策签发证书，从验证缺陷到字段格式错误都算在内。
- [证书颁发机构](https://ssl.sh/zh/glossary/certificate-authority/): 证书颁发机构（CA）是负责审核申请者、签发数字证书，并把公钥与域名或身份绑定在一起的机构。
- [CRLite](https://ssl.sh/zh/glossary/crlite/): CRLite 是 Mozilla 为 Firefox 打造的压缩吊销数据集，浏览器无需联系 CA，就能在本地判断公开记录的证书是否已被吊销。
- [CAA 记录](https://ssl.sh/zh/glossary/caa/): CAA 记录是一种 DNS 记录，用来声明哪些证书颁发机构可以为该域名签发证书，所有公共 CA 签发前都必须检查。
