概览
Fuchsia 使用传输层安全协议 (TLS) 对系统服务和用户应用之间的网络通信进行加密和身份验证。为了在 TLS 握手期间建立信任,操作系统依赖于一组受信任的根证书授权机构 (CA),通常称为 TLS 受信任证书存储区。
为了在传输安全方面强制执行最小权限原则,Fuchsia 将通用公共 Web 信任与范围受限的信任库(例如 Google Trust Services 根存储区)分开。Fuchsia 不会向所有组件公开单个系统级受信任证书存储区,而是通过组件功能路由和产品组装配置来隔离证书访问权限,从而确保组件仅被授予运行所需的特定根证书的访问权限。
双信任证书存储区架构
Fuchsia 提供两个集中维护的受信任证书存储区软件包:
+-----------------------------------------------------------------------------+
| Fuchsia Platform Services |
| |
| +-----------------------------+ +---------------------------------+ |
| | Google-Specific Services | | Web & Third-Party Runtimes | |
| | (Feedback, Cobalt, | | (WebEngine, HTTP Clients, | |
| | Timekeeper) | | User Applications) | |
| +--------------+--------------+ +----------------+----------------+ |
| | | |
| | +-----------------------------+ | |
| | | Configurable Subsystems | | |
| | | (Software Delivery) | | |
| | +--------------+--------------+ | |
| | | (via Assembly) | |
| v v v |
| +-----------------------------+ +---------------------------------+ |
| | google_root_ssl_certificates| | root_ssl_certificates | |
| | (Google Trust Services) | | (Chrome Root Store) | |
| +-----------------------------+ +---------------------------------+ |
+-----------------------------------------------------------------------------+
1. 公共受信任证书存储区 (root_ssl_certificates)
- 内容:Chrome 根存储区证书软件包。
- 用途:常规出站 HTTPS 流量、Web 浏览器以及与公共互联网上的任意端点通信的第三方服务。
- 路由:通过
root-ssl-certificates目录功能向组件公开,通常以/config/ssl形式装载到组件的命名空间中。
2. Google Trust Services (GTS) 受信任证书存储区 (google_root_ssl_certificates)
- 内容:来自 Google Trust Services (GTS)(由 Google 运营的公共证书授权机构层次结构)的根证书。
- 用途:与 Google 托管的端点通信的服务(例如遥测、崩溃报告、网络时间和软件交付)。
- 安全优势:将信任严格限制在与已知后端端点相关的授权机构,可提供纵深防御:
- 攻击面最小化:将可信根证书授权机构的集合严格限制为预期端点所需的那些,从而显著缩小整体信任面。
- 缩小影响范围:保护关键平台基础架构免受意外的信任委托、证书配置错误或更广泛的 Web PKI 中的信任流失的影响。
- 范围受限的信任对齐:通过将信任锚直接与预期的后端通信渠道相匹配,强制执行最小权限原则。
信任存储区分配与路由
组件会根据其联网要求获得受信任证书存储区访问权限:
1. 静态路由平台服务
仅与第一方 Google 后端端点通信的服务在组件拓扑中静态路由到 google_root_ssl_certificates:
- 反馈和取证 (
feedback):仅将崩溃报告和诊断快照上传到 Google 后端服务。 - Cobalt 指标 (
cobalt):将可保护隐私的系统遥测数据传输到 Google 指标流水线。 - Timekeeper (
timekeeper):在httpsdate网络时间同步期间,针对 Google 时间服务器验证 TLS 证书。
2. 可配置的子系统(软件交付)
在产品组装时,会配置同时为一般开源产品和受限的第一方产品提供服务的子系统。目前,软件交付 (SWD) 堆栈(omaha-client、system-updater)可通过程序集进行配置:
platform: {
software_delivery: {
trust_store: "restricted", // Options: "restricted" | "public"
},
}
"restricted":由第一方产品使用,以确保更新检查和软件包下载严格针对 Google 基础架构进行身份验证。"public"(默认):由从一般公共代码库下载软件包的通用开源产品或自定义产品使用。
在组装期间,平台会动态包含匹配的平台组装输入软件包 (AIB)(swd_trust_store_restricted 或 swd_trust_store_public),并将相应的 HTTP 客户端协议(fuchsia.net.http.Loader 和 fuchsia.pkg.http.Client)从 #network 路由到更新和软件包堆栈。
验证和架构保证
Fuchsia 使用平台级工具来强制执行受信任证书存储区边界:
- 程序集 build 时验证:平台程序集工具在映像构建期间验证产品配置,防止出现无效或冲突的信任库选择。
- Scrutiny 静态分析:Scrutiny 框架可在 build 时对组件拓扑和功能路由进行静态验证。产品可以定义路由政策,以保证安全关键组件仅路由到已获批准的信任库。
平台政策:产品提供的信任库
Fuchsia 平台不支持将自己的任意 TLS 受信任证书存储区提供或注入到核心平台服务中的产品。
理由
保持平台安全不变量:核心平台服务(例如系统更新验证、崩溃报告和硬件认证)代表着基本的安全边界。如果允许将未经审查或任意的根证书注入到平台服务中,就会创建一种绕过平台安全控制并损害系统完整性的机制。
经过审核的平台基准:平台集中维护和审核受支持的受信任证书存储区配置文件。产品通过选择经过审核的平台配置文件(例如
restricted与public)来配置其行为,而不是引入未经验证的根集。应用与平台边界:需要自定义或私有企业 PKI 的应用、用户空间运行时或 guest 环境(例如 Web 运行时或容器运行时)必须在自己的隔离沙盒中管理这些证书。自定义应用信任不得与平台级系统服务混合或传播到平台级系统服务。