В анонсе Good Bear я рассказал, почему идея «добавить нужный корневой сертификат в систему или браузер» мне не подходит. Такой корень получает право подтверждать подлинность любого сайта, а не только тех ресурсов, ради которых его установили. Тогда Good Bear был проектом в высокой степени готовности. Теперь можно говорить о результате: опубликован Good Bear 1.0 — русскоязычный браузер на базе Firefox 156.0.
Это не вторая попытка пересказать анонс и не перечень всех изменений в исходниках. Хочется разобрать готовую версию с практической стороны: что именно появилось в 1.0, как это видно в интерфейсе, чем Good Bear отличается от обычного Firefox, где проходят границы проекта и как устроен путь от исходников до двух дистрибутивов.
Сразу важная оговорка. Good Bear не пытается объявить российскую PKI «лучше» или «хуже» обычного хранилища Firefox. У этих инфраструктур доверия разная область применения. Задача 1.0 — дать возможность работать с нужными сайтами и при этом не смешивать их доверие, данные браузера и учётные данные с обычным контекстом.
Что стало выпуском 1.0
Публичный выпуск — это Good Bear 1.0 на базе Firefox 156.0. Он поставляется только на русском языке и имеет два дистрибутива: пакет .deb для Ubuntu 24.04 LTS amd64 и установщик для Windows x64. Версия Good Bear и версия Firefox намеренно существуют рядом: в интерфейсе и в сведениях о выпуске это пара Good Bear 1.0 (Firefox 156.0), а не попытка спрятать происхождение продукта.
Главная функция версии — контейнер российской PKI. Это не вкладка с другим цветом и не расширение. Внутри используется встроенная контейнерная инфраструктура Firefox с настоящими userContextId и OriginAttributes. Для хранилищ, кешей и сетевых решений это отдельный контекст, а не косметическая метка.
Сценарий работы выглядит так.
Обычный HTTPS-сайт проходит привычную проверку Firefox. Если она успешна, Good Bear ничего дополнительно не делает.
Если обычная проверка не может построить доверенную цепочку, браузер может выполнить узкую вторичную проверку. Она принимает только цепочку до точно закреплённого российского корневого сертификата и не опирается на слова в имени сертификата.
После успешной вторичной проверки исходная обычная навигация не продолжается. Адрес открывается заново в специальном контейнере, где эта цепочка разрешена политикой Good Bear.
Если цепочка ошибочна — неправильное имя хоста, срок, подпись, назначение, ограничения центра сертификации или сама цепочка, — остаётся штатная ошибка Firefox. Отдельный контейнер не превращает ошибку в успех.
Такой порядок важнее самого факта поддержки сертификатов. Обычная сессия не должна успеть отдать сайту данные сайтов, сведения о предыдущем переходе, данные аутентификации или содержимое формы до того, как браузер поймёт, что перед ним другой контур доверия. Поэтому GET и HEAD можно безопасно открыть заново в изолированном контексте, а POST, PUT и PATCH не воспроизводятся автоматически. При запросе с содержимым Good Bear предлагает либо открыть только адрес в контейнере, либо вернуться назад.
Для уже известных сайтов сохраняется назначение точного адреса: схемы, имени хоста и порта. Оно не распространяется автоматически на поддомены и не даёт сертификату доверия само по себе. Это лишь решение о том, в каком контейнере начать следующую проверку. Если ранее сайт открывался с обычной цепочкой, а затем требует российскую PKI, переход не происходит молча: браузер показывает отдельную страницу смены контура доверия и даёт выбрать изолированное открытие или возврат.
Контейнер — это граница данных, а не значок
Именно на изоляции построена вся версия 1.0. Контейнер не получает автоматически данные из обычного профиля и не отдаёт свои данные обратно. Граница распространяется на данные сайтов, локальные хранилища, кэш браузера, фоновые обработчики страниц, HTTP-аутентификацию, клиентские сертификаты, повторное использование соединений и другую сессионную информацию.
Пароли и автозаполнение в контейнере российской PKI не стали «удобно общими». В 1.0 они отключены, если безопасное разделение для конкретного механизма нельзя доказать. Это менее комфортно, чем показать в изолированной вкладке привычную подсказку с сохранёнными данными входа, зато случайно не переносит учётную запись с обычного сайта в другой контур доверия.
Та же логика действует для подресурсов. Обычная страница не получает скрипт, изображение, таблицу стилей, вложенную страницу или запрос с цепочкой российской PKI через скрытого посредника. Такой подресурс блокируется. Внутри же изолированного контейнера могут открываться обычные сайты: вкладка остаётся изолированной, но дополнительный значок российской PKI для обычной цепочки не показывается.
В результате Good Bear не делает обещаний, которые браузер не может честно выполнить. Контейнер не скрывает IP-адрес, сетевой маршрут, DNS, отпечаток браузера или данные, которые пользователь сам отправляет сайту. Это не средство анонимизации и не защита от расширения с широкими разрешениями. Его назначение уже и понятнее: отделить локальные данные браузера от обычного контекста при работе с отдельной инфраструктурой доверия.
Что видно в графическом интерфейсе
В обычной вкладке Good Bear намеренно похож на Firefox. Это важно: браузер не должен заставлять человека каждый раз заново учиться базовой навигации, управлению вкладками или настройкам сайта. Изменения появляются там, где меняется модель доверия или происхождение продукта.
У вкладки российской PKI есть два независимых признака.
Первый — постоянный нейтральный маркер контейнера. Он сообщает, что вкладка находится в изолированном пространстве, даже если текущий сайт внутри неё использует обычную цепочку доверия. Второй — отдельный индикатор RU, который появляется только при фактической цепочке российской PKI. Это разные ответы на разные вопросы: «где открыта вкладка?» и «какой источник доверия использован сейчас?».
Такое разделение может показаться избыточным, но у него есть практический смысл. Если оставить только RU, пользователь не заметит, что после перехода на обычный сайт вкладка всё ещё сохраняет изоляцию. Если оставить только контейнерный маркер, станет неясно, почему именно для текущего соединения понадобилась вторичная проверка. Good Bear показывает оба состояния и не пытается сообщить их цветом или персонажем-медведем.
По нажатию на индикатор открывается панель сведений о безопасности. В ней видны имя хоста, данные конечного сертификата, издатель, корень цепочки и источник доверия. Там же есть пояснение, что данный корень разрешён только внутри контейнера российской PKI, и кнопка просмотра сертификата. Формулировки специально не называют сайт «вообще безопасным» и не создают впечатления, что Good Bear — официальный продукт Минцифры, ФСТЭК или Mozilla.
Отдельной страницей оформлен переход STANDARD → RUSSIAN_PKI. Вместо того чтобы показывать привычный SEC_ERROR_UNKNOWN_ISSUER и предлагать исключение, Good Bear объясняет, что сертификат может пройти проверку в другом контуре доверия. Пользователь может открыть адрес изолированно, вернуться назад или посмотреть сертификат. Обычные данные просмотра при этом не переносятся.
В настройках есть переключатель поддержки российской PKI, список назначенных адресов и действия для удаления одного назначения или очистки списка. Отключение функции не оставляет «скрытого» доверия: российская PKI перестаёт применяться везде, а сайты получают обычное поведение Firefox. Интерфейс также честно сообщает, что хранение и автоподстановка паролей в этом контейнере ограничены.
Ниже — короткая карта различий с классическим Firefox 156.0.
Область | Firefox 156.0 | Good Bear 1.0 |
|---|---|---|
Доверие к российскому корню | Не добавлено в глобальное хранилище Firefox | Применяется только внутри контейнера российской PKI и только после полной проверки цепочки |
Открытие подходящего сайта | Обычная ошибка неизвестного издателя | Повторное открытие в изолированном контейнере без переноса обычных данных |
Адресная строка | Обычные индикаторы Firefox | Отдельный маркер контейнера и отдельный |
Переход между контурами доверия | Нет специального сценария Good Bear | Блокирующий выбор для перехода с ранее обычной цепочки к российской PKI |
Данные профиля | Обычная модель одного контекста | Изолированы между обычным и контекстом российской PKI; чувствительные механизмы ограничены, если разделение не доказано |
Поставка | Обычные каналы и языки Firefox | Собственное имя Good Bear, единственная поставляемая локаль |
Обновления и отчёты | Возможности зависят от поставки Firefox | В 1.0 нет подписанного MAR, сервера обновлений, автоматического обновления и собственного сбора статистики; отправка отчётов о сбоях отключена |
Помимо интерфейса безопасности, заметно и самостоятельное оформление продукта. Good Bear — отдельная продуктовая идентичность, а не перекрашенный Firefox: у него свои название, значки, экран «О программе» и русские строки. При этом нейтральные функциональные элементы интерфейса не менялись только ради изменения. Персонаж-медведь помогает опознать продукт в обычных контекстах, но никогда не служит доказательством валидности сертификата: для этого существуют отдельные понятные индикаторы и текст.
Что в 1.0 сознательно не вошло
У версии есть достаточно чёткая граница. Она важна не меньше списка функций.
Во-первых, Good Bear 1.0 не добавляет российские криптографические алгоритмы и не расширяет ради них TLS. В выпуск не входят ГОСТ Р 34.10, Стрибог, Кузнечик, Магма, GOST TLS, интеграция CryptoPro, специальные механизмы PKCS#11, CMS/CAdES и собственный прикладной интерфейс WebCrypto. Браузер использует те алгоритмы, которые уже поддерживает Firefox/NSS; различие касается области применения точно заданного корня, а не замены криптографии.
Во-вторых, здесь нет глобального импорта корня, определения цепочки по тексту в сертификате, общего выключателя проверки сертификатов и универсального пользовательского исключения. Нельзя подменить закреплённый российский корень одноимённым сертификатом и нельзя считать промежуточный сертификат самостоятельным корнем. Проверяются имя хоста, срок действия, подпись, назначение ключа, ограничения центра сертификации, длина и состав цепочки — те же вещи, которые Firefox проверяет для обычного HTTPS.
В-третьих, 1.0 не обещает безопасного автоматического обновления. Дистрибутивы намеренно не имеют цифровой подписи: в выпуске нет ключа подписи, MAR-файлов, сервера обновлений и автообновления. При установке нужно сверить имя файла и SHA-256. Это не удобство, отложенное «на потом», а честная граница: пока не выстроена и не проверена отдельная цепочка доверия обновлений, браузер не должен имитировать её наличие.
Наконец, это не универсальный пакет на все платформы. Цели 1.0 — Ubuntu 24.04 LTS amd64 и Windows x64. Snap, Flatpak, AppImage, macOS, мобильные платформы, arm64 и поддержка других Debian-подобных дистрибутивов не заявляются. Good Bear также не реализован как расширение браузера, перехватывающий прокси, LD_PRELOAD, внедрение DLL или исправление уже установленного браузера во время работы: изменения живут в исходном коде и воспроизводимом наборе патчей.
Лицензия, происхождение и границы бренда
Программная часть Good Bear распространяется по Mozilla Public License 2.0. Для выпуска опубликованы соответствующие исходники: изменения файлов под MPL, надстройки, русская локализация, материалы сборки, перечень компонентов, контрольные суммы и сведения о происхождении. MPL требует, чтобы при распространении исполняемой формы получатель мог получить соответствующую исходную форму; она же не передаёт права на товарные знаки. Поэтому лицензия исходного кода, сохранение уведомлений и отдельная продуктовая идентичность — не одна и та же задача.
В публичном репозитории нет полной копии Firefox. Вместо неё есть точный рецепт: скачать закреплённый архив Firefox 156.0, проверить SHA-256, применить упорядоченную серию патчей и развернуть закреплённую русскую локализацию. Такой состав позволяет проверить изменения Good Bear, не выдавая за новый проект гигантское исходное дерево Firefox.
Mozilla и Firefox упоминаются там, где нужно объяснить происхождение и сохранить уведомления, но Good Bear не является их официальной редакцией и не аффилирован с Mozilla. Тот же принцип относится к российским государственным органам: поддержка российской PKI — самостоятельная функция совместимости и изоляции, а не сертификат, одобрение или государственный статус продукта.
Для оригинальной графики и сторонних компонентов в выпуске есть отдельные уведомления и перечень происхождения. Сертификатные данные также не становятся «собственностью Good Bear»: их происхождение проверяется по официальному источнику и закреплённым идентификаторам, а способ включения контролируется сборочным процессом. Перед публикацией следующей версии эти материалы и условия нужно снова сверять по актуальным источникам, а не переносить выводы из одного выпуска в другой.
Как из исходников получается выпуск
Сборка Good Bear разделена на несколько стадий. Это сделано не ради усложнения процесса, а чтобы локальная рабочая директория, удалённая сборочная среда и публичное описание получения исходников не смешивали свои роли.
Сначала в чистой копии репозитория запускается bootstrap_public_source.sh. Скрипт получает именно закреплённый архив Firefox 156.0 по HTTPS, проверяет SHA-256 и применяет патчи в заданном порядке. Затем он разворачивает точную редакцию русской локализации и проверяет языковую надстройку Good Bear. Сертификатные материалы поступают только из закреплённых официальных адресов, сверяются до добавления в локальные входы и не скачиваются работающим браузером.
После этого начинаются проверки исходного дерева. Они охватывают порядок патчей, границы доверия, отрицательные сценарии TLS, изоляцию навигации и хранилищ, русскую локализацию, оформление бренда, перечень компонентов и состав публичных исходников. Отдельно проверяется, что в публичный репозиторий не попадут профиль браузера, каталог объектов сборки, кеш, учётные данные, приватные ключи или случайный бинарный кандидат.
Для финальной сборки используются два изолированных нативных стенда: Ubuntu 24.04 LTS amd64 и Windows Server x64. На каждом стенде сначала фиксируются окружение и набор средств сборки, свободное место, локаль ru_RU.UTF-8, входные хеши и параметры запуска. Только затем туда передаётся проверенный неизменяемый пакет исходников. Стенд не является источником истины: он возвращает журналы, хеши и артефакты для локальной проверки, а прерванный или неуспешный запуск остаётся в карантине.
Полная оптимизация на этапе компоновки, LTO, выполняется после обычных проверок и фиксирует один набор исходников и входов для обеих платформ. В конце из результата формируются сами дистрибутивы, SHA-256, машиночитаемый перечень компонентов SBOM в формате CycloneDX, сведения о происхождении, уведомления и описание получения исходников. Это не заменяет ручную проверку на чистой машине, но оставляет читаемую цепочку от файла, который пользователь скачивает, до исходников и параметров его сборки.
На странице выпуска v1.0.0 лежат оба дистрибутива, SHA256SUMS, SBOM, сведения о происхождении, уведомления и описание получения исходников. Перед установкой стоит не пропускать проверку хеша. Для Ubuntu достаточно sha256sum, в Windows PowerShell — Get-FileHash -Algorithm SHA256. Порядок и ожидаемые значения приведены рядом с файлами, поэтому для такой проверки не нужно доверять зеркалу или пересказу в статье.
Что дальше
Good Bear 1.0 — не обещание решить всё, что связано с российскими сертификатами. Это первая законченная версия с довольно строгим правилом: отдельная область доверия не должна незаметно стать частью обычного браузера. В следующей работе придётся поддерживать базу Firefox, повторно проходить проверки безопасности и интерфейса, развивать поставку и только после отдельной проверки обсуждать подписанные обновления или новые платформы.
Если вы пользуетесь Good Bear, попробуйте сценарий, для которого он создан: открыть ресурс с российской PKI, посмотреть маркеры контейнера и цепочки, проверить поведение переходов и сообщить о воспроизводимой проблеме. Полезный отчёт содержит версию Good Bear и Firefox, платформу, шаги, ожидаемый и фактический результат — но не должен содержать пароли, данные сайтов, токены или приватные данные.
Поддержать разработку можно на Boosty. Деньги нужны на поддержание двух сборочных стендов, инструменты разработки и проверки, тестовые прогоны, подготовку выпусков и время команды на сопровождение основы на Firefox. Но важна не только сумма: любая поддержка помогает. Главное — участие и формирование сообщества вокруг проекта, чтобы Good Bear продолжал жить и развиваться. Донат не открывает дополнительных функций, не даёт особого статуса и не меняет условия лицензии. Но со временем мы планируем спонсорам давать больше возможностей для влияния на проект.

