Fuchsia uses Transport Layer Security (TLS) to encrypt and authenticate network communications across system services and user applications. To establish trust during TLS handshakes, the operating system relies on a set of trusted Root Certificate Authorities (CAs), commonly known as a TLS trust store.
To enforce the principle of least privilege in transport security, Fuchsia separates general-purpose public web trust from scoped trust stores (such as the Google Trust Services root store). Rather than exposing a single system-wide trust store to all components, Fuchsia isolates certificate access through component capability routing and product assembly configuration, ensuring that components are granted access only to the specific root certificates required for their operation.
Fuchsia provides two centrally maintained trust store packages:
+-----------------------------------------------------------------------------+ | 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) | | | +-----------------------------+ +---------------------------------+ | +-----------------------------------------------------------------------------+
root_ssl_certificates)root-ssl-certificates directory capability, typically mounted into a component's namespace at /config/ssl.google_root_ssl_certificates)Components receive trust store access according to their networking requirements:
Services that communicate exclusively with first-party Google backend endpoints are statically routed to google_root_ssl_certificates in component topology:
feedback): Uploads crash reports and diagnostic snapshots strictly to Google backend services.cobalt): Transmits privacy-preserving system telemetry to Google metrics pipelines.timekeeper): Validates TLS certificates during httpsdate network time synchronization against Google time servers.Subsystems that serve both general open-source products and restricted first-party products are configured at product assembly time. Currently, the Software Delivery (SWD) stack (omaha-client, system-updater) is configurable via assembly:
platform: { software_delivery: { trust_store: "restricted", // Options: "restricted" | "public" }, }
"restricted": Used by first-party products to ensure that update checks and package downloads authenticate strictly against Google infrastructure."public" (default): Used by generic open-source or custom products downloading packages from general public repositories.During assembly, the platform dynamically includes the matching Platform Assembly Input Bundle (AIB) (swd_trust_store_restricted or swd_trust_store_public) and routes the selected certificate directory capability (swd-root-ssl-certificates) from #core to the update stack.
Fuchsia uses platform-level tooling to enforce trust store boundaries:
Fuchsia as a platform does not support products providing or injecting their own arbitrary TLS trust stores into core platform services.
Preserving Platform Security Invariants: Core platform services (such as system update verification, crash reporting, and hardware attestation) represent fundamental security boundaries. Allowing unvetted or arbitrary root certificates to be injected into platform services would create a mechanism to bypass platform security controls and compromise system integrity.
Audited Platform Baselines: The platform maintains and audits supported trust store profiles centrally. Products configure their behavior by selecting among audited platform profiles (such as restricted vs public) rather than introducing unverified root sets.
Application vs. Platform Boundary: Applications, user-space runtimes, or guest environments (such as web runtimes or container runtimes) that require custom or private enterprise PKI must manage those certificates within their own isolated sandboxes. Custom application trust must not be mixed with or propagated to platform-level system services.