Перейти к содержимому

Ruthenium chromium для android с сертификатом Минцифры для сайтов с russian trusted root Ca

Ruthenium: Chromium для Android с поддержкой сертификата Минцифры

Часть российских банков и государственных порталов выстраивают TLS‑цепочки так, что в конце оказывается корневой центр Russian Trusted Root CA. В результате одни браузеры открывают такие сайты без вопросов, а другие упираются в ошибку проверки доверия. Например, Яндекс Браузер и "Атом" умеют работать с этой схемой "из коробки", а Chrome на Android нередко отвечает знакомым NET::ERR_CERT_AUTHORITY_INVALID - просто потому, что нужного корня нет в хранилище Chromium.

Именно эта коллизия и подтолкнула к появлению Ruthenium. Идея простая: сохранить привычный пользовательский опыт "хромоподобного" интерфейса, но добавить недостающий корневой сертификат так, чтобы не трогать системное хранилище Android. Так появился Ruthenium Chromium Android с сертификатом Минцифры - отдельный APK, где доверенный корень встроен на уровне самого браузера и дополнительно ограничен доменными зонами .ru и .рф.

Технически проблема выглядит так. Когда сайт устанавливает защищённое соединение, он отправляет браузеру свой сертификат и промежуточные сертификаты. Клиент проверяет имя, срок действия и подписи, после чего пытается "достроить" цепочку до доверенного корня. Если такого корня в доверенном хранилище нет, цепочка не замыкается - соединение считается недоверенным, даже если всё остальное корректно. Поэтому Chrome отклоняет такие сайты не из-за "плохого" сертификата на сервере, а из-за отсутствия Russian Trusted Root CA у себя.

У пользователя есть несколько обходных путей, но каждый со своими компромиссами. Можно перейти на браузер, где эта поддержка уже предусмотрена. Можно вручную установить корневой сертификат в пользовательское (или даже системное) хранилище Android - но тогда меняется общая модель доверия устройства, и не всегда очевидно, как это повлияет на другие приложения и политики безопасности. Ruthenium выбирает третий путь: это браузер для Android с поддержкой Russian Trusted Root CA, но только в рамках самого приложения - без вмешательства в сертификаты всей системы.

Внутри Ruthenium нет "самодельного" TLS‑проверяльщика: используется штатная логика Chromium. Разница лишь в том, что браузеру дополнительно передаётся ещё один корень доверия - и не безусловно, а как CertWithConstraints с разрешёнными DNS‑суффиксами для .ru и .xn--p1ai (ASCII‑представление .рф). Примечательно, что ограничение применяется к именам из SAN (Subject Alternative Name): если в сертификате заявлены домены за пределами разрешённых зон, цепочка через добавленный корень будет отвергнута даже тогда, когда пользователь открывает "правильный" домен. Это дисциплинирует выпуск сертификатов и уменьшает риск "широкого" применения корня за пределами ожидаемого периметра.

Сам патч вшивается в сборку Chromium на уровне сетевого контекста профиля (в частности, через правки в `profile_network_context_service.cc`). Сертификат переводится из PEM в DER и попадает в сборку как массив байтов. Дополнительно предусмотрена защита от незаметной подмены: перед применением патча DER‑данные строго валидируются, а их SHA‑256 сверяется с заранее зафиксированным значением в lock‑файле. Если отпечаток внезапно меняется, сборка должна "падать", чтобы разработчик заметил несоответствие.

Важный нюанс ограничений: permitted_dns_names относится именно к DNS‑именам, а не ко всем возможным идентификаторам. Например, SAN типа iPAddress в такую "маску" не всегда попадает, и сертификат, выпущенный напрямую на IP‑адрес, может обойти доменное сужение. Поэтому ограничение в текущем виде - это про контроль зоны DNS, а не универсальный запрет на любые сценарии.

Помимо сертификатной части, в проекте пришлось решать сугубо практические "грабли" сборки Android‑версии Chromium, особенно в режиме `is_official_build=true`. Такой режим включает релизные оптимизации и ожидает наличие внешних PGO‑профилей Chromium и V8, что на некоторых конфигурациях (включая 32‑битный ARM) усложняет получение корректного APK без дополнительных шагов. Отдельным блоком шли правки, связанные с компонентами, которые в минимальной сборке без XR оказываются недоступны: там, где Chromium пытался вызывать отсутствующие методы, их заменили более простыми заглушками (например, на возврат пустого изображения или подстановку стандартной иконки поиска).

Ещё один принципиальный выбор - изоляция от аккаунтов. По умолчанию в такой сборке вход в аккаунт на уровне браузера отключён: это снижает площадь риска и делает продукт более предсказуемым для тех, кому нужен "один браузер под конкретные сайты", а не ещё одна точка синхронизации данных.

Тем, кому нужно быстро разобраться в деталях реализации и ограничений, удобно ориентироваться на описание проекта Ruthenium и его сборочного подхода: Chromium для Android с российскими сертификатами Минцифры - хороший ориентир по архитектуре патча и сборочным нюансам.

---

Что это означает для пользователей и организаций

Если ваша задача - просто открыть несколько "капризных" банковских или госстраниц, то чаще всего достаточно один раз скачать Ruthenium браузер для Android, установить APK и пользоваться им точечно, не меняя основной браузер для повседневного серфинга. Такой сценарий особенно удобен тем, кто не хочет лезть в настройки сертификатов Android и переживает из‑за последствий для других приложений.

С точки зрения ИБ‑логики важно понимать: Ruthenium не "отключает проверки", а добавляет доверенную точку, причём в суженном виде. На практике это выглядит как попытка совместить совместимость и осторожность: привычная валидация остаётся, но появляется возможность строить цепочку там, где стандартный Chromium не доверяет корню.

Для корпоративной среды подход тоже любопытен. Там нередко требуется управляемый браузер с предсказуемым набором доверенных корней и минимальной вариативностью поведения. В таком контексте запрос уровня "купить корпоративный браузер Chromium для Android с поддержкой Минцифры" обычно упирается не только в функциональность сертификатов, но и в вопросы сопровождения: обновления движка, контроль версий, политика входа в аккаунты, MDM‑развёртывание и регламент поддержки. Проектный подход Ruthenium показывает, как можно решать сертификатную совместимость в рамках приложения, не превращая это в системную модификацию устройства.

Отдельно стоит сказать об установке и проверке. После установки APK логично первым делом открыть сайт, который раньше падал с ошибкой доверия, и убедиться, что соединение устанавливается корректно. Если страница по‑прежнему не открывается, причина может быть не в корне, а в самой цепочке (например, в некорректной конфигурации промежуточных сертификатов или несоответствии SAN). В таком случае даже Chromium для Android с российскими сертификатами Минцифры не обязан "исцелять" серверные ошибки - он лишь добавляет недостающее звено доверия там, где всё остальное собрано правильно.

И наконец - про границы применимости. Ruthenium решает конкретную задачу совместимости с цепочками, уходящими в Russian Trusted Root CA, но не подменяет собой полноценную платформенную стратегию доверия. Если вам нужен единый стандарт на всех приложениях устройства, возможно, придётся смотреть в сторону управляемых политик Android или корпоративных профилей. А если нужен именно "второй Chrome", который открывает нужные ресурсы и не вмешивается в остальную систему, то Ruthenium Chromium Android с сертификатом Минцифры как раз попадает в эту нишу.

Scroll to Top