如有关于此政策的任何问题,请前往 CT 政策论坛: ct-policy@chromium.org
验证连接的传输层安全性 (TLS) 证书时,系统会根据 Android 证书透明度 (CT) 政策评估其合规性。如果证书附带的签名证书时间戳 (SCT) 符合此政策,则该证书被视为符合 CT 要求。
如果证书和一组附带的 SCT 满足一组技术要求(在证书验证期间由热门 TLS 库(包括内置的 Conscrypt)强制执行,并在此政策中定义),则该证书符合 CT 要求。
CT 日志状态
Android 中的 CT 合规性取决于对 CT 日志中的 SCT 进行评估,并确保这些日志在检查时处于正确的状态。 CT 日志可能处于的状态包括:
PendingQualifiedUsableReadOnlyRetiredRejected
为了帮助您了解 Android 中 CT 合规性的要求,Chrome 文档的 CT 日志生命周期说明详细介绍了这些状态的定义、每种状态下日志的要求,以及这些状态对 Android 行为的影响。
符合 CT 要求的证书
如果 TLS 证书附带的一组 SCT 满足至少一个稍后定义的条件(具体取决于 SCT 向 Android 的传送方式),则该证书符合 CT 要求。 在 Android 的强制执行 CT 的应用中,所有公开受信任的 TLS 证书都必须符合 CT 要求才能成功验证;但是,未记录到 CT 或 SCT 不足的证书不被视为错误签发。
在评估证书是否符合 CT 要求时,Android 会考虑多个因素,包括 SCT 的数量、签发 SCT 的 CT 日志的运营方,以及签发 SCT 的 CT 日志在证书验证时和 CT 日志创建 SCT 时所处的状态。
根据 SCT 向 Android 的呈现方式,可以通过满足以下条件之一来实现 CT 合规性:
嵌入式 SCT:
- 至少一个来自 CT 日志的嵌入式 SCT,该 CT 日志在检查时处于
Qualified、Usable或ReadOnly状态;并且 - 至少有 N 个来自不同 CT 日志的嵌入式 SCT,这些 CT 日志在检查时处于
Qualified、Usable、ReadOnly或Retired状态,其中 N 在下表中定义;并且 - 在满足要求 2 的 SCT 中,至少有两个 SCT 必须由 Android 认可的不同 CT 日志运营方签发;并且
| 证书生命周期 | 来自不同 CT 日志的 SCT 数量 |
|---|---|
| <= 180 天 | 2 |
| > 180 天 | 3 |
通过 OCSP 或 TLS 传送的 SCT:
- 至少有两个来自 CT 日志的 SCT,该 CT 日志在检查时处于
Qualified、Usable或ReadOnly状态;并且 - 在满足要求 1 的 SCT 中,至少有两个 SCT 必须由 Android 认可的不同 CT 日志运营方签发;并且
对于嵌入式 SCT 以及使用 OCSP 或 TLS 传送的 SCT,日志运营方 唯一性是指在日志列表的运营方部分 中具有单独的条目。
在 CT 日志在其生命周期内更改运营方的罕见情况下,CT 日志可以选择包含 previous_operators 列表,并附带此日志由先前运营方运营的最终时间戳。
为防止日志运营方更改破坏现有证书,每个 SCT 的日志运营方都确定为 SCT 签发时的运营方,方法是将 SCT 时间戳与 previous_operators 时间戳(如果存在)进行比较。
重要提示
只要握手中呈现的某些 SCT 的组合满足上述 CT 合规性条件之一,额外的 SCT(无论 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 每天都会发布新的 CT 日志列表,其中包含新的 log_list_timestamp。Android 设备每天都会尝试下载此列表的最新版本以进行验证。在任何给定时间,如果设备上没有日志列表,或者日志列表的时间戳超过 70 天,则 CT 强制执行将被停用。
此超时为 CT 生态系统提供了一项关键保证,即新的 CT 日志能够在变为 Qualified 后的固定时间内安全地转换为“可用”状态。
Android 日志列表
Android 日志列表发布在 log_list.json 中,该文件每天更新一次。 此日志列表不提供稳定的 API、SLA 或可用性保证。
Android 提供其 CT 日志列表,供希望与 CT 和 WebPKI 生态系统保持兼容或调查其内容的证书提交者(例如证书授权机构)以及 CT 监控器和审核员使用。
未经授权依赖 Android CT 日志列表不仅会危及您的用户,还会危及 Android 用户和整个 CT 生态系统。如果您正在探索将 CT 强制执行添加到应用中,请使用 Android 平台支持的机制。
不符合此政策使用 Android CT 日志列表的风险由您自行承担,可能会导致您的应用或库中断。Android 必须能够更改 CT 日志列表,以应对 CT 生态系统中的事件,从而维护 Android 用户的安全。Android 可能会采取措施,确保第三方对 CT 日志列表的依赖不会危及 Android 应对此类事件的能力,包括对日志列表进行未公布的更改以中断未经授权的使用。