Ruthenium: Custom Chromium Build for Android Adds Russian Trusted Root CA Support

A developer has released Ruthenium, a modified Chromium browser for Android that embeds the Russian Trusted Root CA certificate issued by the Ministry of Digital Development. The build restricts trust to .ru and .рф domains only, avoiding changes to the system-wide Android certificate store. The project patches four Chromium source files to include the root with DNS constraints via CertWithConstraints, disables Google sign-in by default, and removes XR-related code for successful compilation. Ruthenium uses the official Chromium TLS verification logic without introducing a custom verifier. The APK is distributed with SHA-256 checksums, build metadata, and reproducible release tags tied to the exact Chromium revision and certificate digest. Users can install it alongside stock Chrome and use it selectively for Russian government and banking sites that rely on the state root.

HabrTranslated from Russian

Read at source

Ruthenium is a custom build of Chromium for Android that adds support for the Russian Trusted Root CA certificate from the Ministry of Digital Development without modifying the system certificate store.

Many Russian banks and government services use TLS chains ending at this root. Standard Google Chrome on Android rejects these chains with NET::ERR_CERT_AUTHORITY_INVALID because the root is absent from Chromium’s built-in store. The author wanted to keep using Chrome’s interface and therefore created a separate APK that includes the root with strict DNS constraints limited to .ru and .рф zones.

Why Chrome rejects the chain

The browser receives the site certificate and intermediates, validates names, validity periods and signatures, then attempts to build a path to a trusted root. Because Russian Trusted Root CA is not present in Chromium, verification fails. Existing solutions either require switching to another browser or installing the root into Android’s system store, which affects all applications.

Technical implementation of the patch

The certificate is converted from PEM to DER and embedded as a byte array in chrome/browser/net/profile_network_context_service.cc. The patch creates a CertWithConstraints object that adds the root with permitted_dns_names set to {“.ru”, “.xn--p1ai”}. This constraint applies to all DNS names listed in the certificate’s Subject Alternative Name, preventing misuse outside the allowed TLDs. The build scripts verify the DER SHA-256 against a lock file before compilation.

Four C++ files are modified in total: the network context service for the constrained root, primary_account_manager.cc to disable browser-level sign-in by default, and two omnibox/searchbox files to replace unavailable XR icon methods on Android builds without VR support.

Build configuration and distribution

The release uses is_official_build=true with ThinLTO enabled but external PGO profiles disabled. VR and AR features are turned off via GN flags. Each APK is published with a release tag that incorporates the Chromium revision, certificate digest, and build arguments, enabling traceability. Checksums, ABI information, and apksigner verification results accompany every binary.

Ruthenium installs under the package name app.ruthenium.browser and keeps its data separate from Chrome. No auto-update mechanism is provided; users must install new versions manually. The browser behaves identically to upstream Chromium on non-Russian domains.

Meridian digestThe week's most consequential security stories, distilled into one briefing.See the digest

More in Policy & Regulation

Russian Minister Proposes Blocking All SIM Cards Linked to Fraudsters Banned in MAX Messenger
Russia Ready to Disclose Source Code of Social Networks, Messengers and AI Models
Russia Mulls Mandatory Two-Week IMEI Registration for Foreign Smartphones via Gosuslugi