Android 证书透明度政策

关于此政策的任何问题,请发送至 CT Policy 论坛:ct-policy@chromium.org

当在选择启用证书透明度的应用中验证连接的传输层安全协议 (TLS) 证书时,会根据 Android 证书透明度 (CT) 政策对其进行合规性评估。附带满足此政策要求的签名证书时间戳 (SCT) 的证书,称为 CT 合规证书。

CT 合规性是通过证书和一组配套的 SCT 来实现的,这些证书和 SCT 在证书验证期间满足此政策中定义的、由常用 TLS 库(包括 Android 内置的 Conscrypt)强制执行的一系列技术要求。

CT 日志状态

Android 中的 CT 合规性通过评估 CT 日志中的 SCT 并确保这些日志在检查时处于正确状态来确定。CT 日志可能的状态集包括

  • 待处理
  • 合格
  • 可用
  • 只读
  • 已停用
  • 已拒绝

为了帮助理解 Android 中 CT 合规性的要求,这些状态的定义、每种状态下日志的要求以及这些状态如何影响 Android 行为,都在 Chrome 文档的CT 日志生命周期说明中详细描述。

CT 合规证书

如果某个 TLS 证书附带了一组 SCT,并且这组 SCT 满足后续定义的至少一项条件(具体取决于 SCT 如何送达 Android),则该证书为 CT 合规。在强制执行 CT 的 Android 应用中,所有公共信任的 TLS 证书都必须是 CT 合规证书才能成功验证;但是,未记录到 CT 或 SCT 不足的证书不被视为错误颁发。

在评估证书的 CT 合规性时,Android 会考虑多个因素,包括存在多少 SCT、颁发 SCT 的 CT 日志的运营者是谁,以及颁发 SCT 的 CT 日志在证书验证时和 SCT 由 CT 日志创建时的状态。

根据 SCT 呈现给 Android 的方式,CT 合规性可以通过满足以下任一条件来实现

嵌入式 SCT

  1. 在检查时,至少一个嵌入式 SCT 来自处于 QualifiedUsableReadOnly 状态的 CT 日志;并且
  2. 在检查时,至少有 N 个来自处于 QualifiedUsableReadOnlyRetired 状态的不同 CT 日志的嵌入式 SCT,其中 N 的值在下表中定义;并且
  3. 满足条件 2 的 SCT 中,至少有两个 SCT 必须由 Android 识别为不同的 CT 日志运营者颁发;并且
  4. 满足条件 2 的 SCT 中,至少有一个 SCT 必须由 Android 识别为RFC 6962 合规的日志颁发。
证书有效期 来自不同 CT 日志的 SCT 数量
<= 180 天 2
> 180 天 3

通过 OCSP 或 TLS 传输的 SCT

  1. 在检查时,至少有两个 SCT 来自处于 QualifiedUsableReadOnly 状态的 CT 日志;并且
  2. 满足条件 1 的 SCT 中,至少有两个 SCT 必须由 Android 识别为不同的 CT 日志运营者颁发;并且
  3. 满足条件 1 的 SCT 中,至少有一个 SCT 必须由 Android 识别为 RFC6962 合规的 CT 日志颁发。

对于嵌入式 SCT 和通过 OCSP 或 TLS 传输的 SCT,日志运营者的唯一性定义为在 log_list.json 文件的 operators 部分中拥有单独的条目。

在 CT 日志在其生命周期内更改运营者的罕见情况下,CT 日志可以选择包含一个 previous_operators 列表,以及该日志由前一个运营者运营的最终时间戳。为了防止日志运营者更改破坏现有证书,每个 SCT 的日志运营者通过将 SCT 时间戳与 previous_operators 时间戳(如果存在)进行比较,确定为 SCT 颁发时的运营者。

重要注意事项

只要握手中呈现的 SCT 的某种组合满足前述 CT 合规性条件之一,额外的 SCT,无论其状态如何,都不会对证书的 CT 合规性状态产生正面或负面影响。

为了有助于证书的 CT 合规性,SCT 必须在日志的 Retired 时间戳(如果存在)之前颁发。Android 使用所有呈现的 SCT 中最早的一个来对照 CT 日志 Retired 时间戳评估 CT 合规性。这考虑了 CT 日志在提交证书日志记录请求过程中变为 Retired 的边缘情况。

“嵌入式 SCT”是指使用证书本身中的 SignedCertificateTimestampList X.509v3 扩展传递的 SCT。许多 TLS 服务器不支持 OCSP Stapling 或 TLS 扩展,因此 CA 应该准备好将 SCT 嵌入到颁发的证书中,以确保在 Android 中成功验证或进行 EV 处理。

CT 日志如何添加到 Android

CT 日志如何成为 Qualified 的标准,以及导致它们变为 Retired 的情况,可以在 Chrome CT 日志政策中找到。

CT 强制执行超时

每天,Google 都会发布一份新的 CT 日志列表,其中包含最新的 log_list_timestamp。Android 设备每天都会尝试下载此列表的最新版本,用于验证目的。如果在设备上没有可用的日志列表,或日志列表的时间戳超过 70 天,则将禁用 CT 强制执行。此超时向 CT 生态系统提供了一项关键保证,即新的 CT 日志在变为 Qualified 后,能够在固定的时间内安全地转换为 Usable 状态。