如有关于此政策的任何问题,请发送电子邮件至 CT 政策论坛:ct-policy@chromium.org
在选择启用证书透明度的应用中验证连接的传输层安全性 (TLS) 证书时,系统会评估该证书是否符合 Android 证书透明度 (CT) 政策。附带符合此政策的签名证书时间戳 (SCT) 的证书被称为符合 CT 要求的证书。
通过证书和一组随附的 SCT 满足常用 TLS 库(包括 Android 的内置 Conscrypt)在证书验证期间强制执行的一组技术要求(此政策中定义),即可实现 CT 合规性。
CT 日志状态
Android 中的 CT 合规性是通过评估 CT 日志中的 SCT 并确保这些日志在检查时处于正确状态来确定的。CT 日志可能处于的状态集如下:
Pending
Qualified
Usable
ReadOnly
Retired
Rejected
为帮助您了解 Android 中的 CT 合规性要求,Chrome 文档的 CT 日志生命周期说明详细介绍了这些状态的定义、每个状态对日志的要求,以及这些状态对 Android 行为的影响。
符合 CT 标准的证书
如果 TLS 证书附带一组满足下文定义的至少一项条件的 SCT(具体取决于 SCT 传送到 Android 的方式),则表示该证书符合 CT 要求。在强制执行 CT 的 Android 应用中,所有受众所信 TLS 证书都必须符合 CT 要求才能成功验证;不过,未记录到 CT 或 SCT 不足的证书不被视为错误签发。
在评估证书是否符合 CT 合规性要求时,Android 会考虑多种因素,包括存在的 SCT 数量、签发 SCT 的 CT 日志的运营者,以及在验证证书时和 CT 日志创建 SCT 时签发 SCT 的 CT 日志所处的状态。
具体取决于向 Android 呈现 SCT 的方式,您可以通过满足以下任一条件来实现 CT 合规性:
嵌入式 SCT:
- 来自 CT 日志的至少一个嵌入式 SCT,在检查时为
Qualified
、Usable
或ReadOnly
;以及 - 至少有 N 个不同的 CT 日志包含嵌入的 SCT,这些日志在检查时处于
Qualified
、Usable
、ReadOnly
或Retired
状态,其中 N 在下表中定义;并且 - 在满足要求 2 的 SCT 中,至少有两个 SCT 必须由 Android 认可的不同的 CT 日志运营商签发;并且
- 在满足要求 2 的 SCT 中,至少有一个 SCT 必须由 Android 认可为符合 RFC 6962 的日志签发。
证书生命周期 | 来自不同 CT 日志的 SCT 数量 |
---|---|
不超过 180 天 | 2 |
超过 180 天 | 3 |
通过 OCSP 或 TLS 传送的 SCT:
- 来自 CT 日志的至少两个 SCT(在检查时为
Qualified
、Usable
或ReadOnly
);以及 - 在满足要求 1 的 SCT 中,至少有两个 SCT 必须由 Android 认可的不同的 CT 日志运营商签发;并且
- 在满足要求 1 的 SCT 中,至少有一个 SCT 必须由 Android 认可为符合 RFC6962 的 CT 日志签发。
对于嵌入式 SCT 和使用 OCSP 或 TLS 传送的 SCT,日志运算符唯一性定义为在 log_list.json 的“operators”部分中具有单独的条目。
在极少数情况下,CT 日志会在其生命周期内更改操作者,CT 日志可以选择包含 previous_operators
列表,以及由上一个操作者操作此日志的最后时间戳。为防止日志运算符更改破坏现有证书,系统会通过将 SCT 时间戳与 previous_operators
时间戳(如果有)进行比较,确定每个 SCT 的日志运算符是否为 SCT 签发时所用的运算符。
重要说明
只要握手中所提供的 SCT 组合满足上述某个 CT 合规性条件,额外的 SCT(无论其状态如何)都不会对证书的 CT 合规性状态产生正面或负面影响。
为了确保证书符合 CT 合规性要求,SCT 必须在日志的 Retired
时间戳(如果有)之前签发。Android 会使用所提供的所有 SCT 中最早的 SCT,根据 CT 日志 Retired
时间戳评估 CT 合规性。这适用于在提交证书日志记录请求过程中 CT 日志变为“已弃用”的极端情况。
“嵌入式 SCT”是指使用证书本身中的 SignedCertificateTimestampList
X.509v3 扩展提供的 SCT。许多 TLS 服务器都不支持 OCSP 订钉或 TLS 扩展,因此 CA 应准备好将 SCT 嵌入到已颁发的证书中,以确保在 Android 中成功进行验证或 EV 处理。
如何将 CT 日志添加到 Android
如需了解 CT 日志如何变为 Qualified
以及哪些情况会导致它们变为 Retired
,请参阅 Chrome CT 日志政策。
CT 强制执行超时
Google 每天都会发布一个包含新 log_list_timestamp
的 CT 日志列表。Android 设备每天会尝试下载此列表的最新版本以进行验证。在任何给定时间,如果设备上没有日志列表,或者日志列表的时间戳超过 70 天,则系统会停用 CT 强制执行。此超时可向 CT 生态系统提供重要的保证,即新的 CT 日志在变为 Qualified
后能够在固定的时间内安全地转换为“可用”。