Почему сайты банков открываются в Яндекс Браузере, но не открываются в Chrome и Safari

Сегодня сайты нескольких российских банков перестали открываться во многих браузерах. Они перешли на национальные сертификаты безопасности, которые эти браузеры по умолчанию не поддерживают. В Яндекс Браузере сайты продолжают работать без дополнительных настроек. Добавить новый корневой сертификат несложно — гораздо сложнее организовать публичный контроль за выдачей и проверкой сертификатов. Расскажем, как эту задачу решает Certificate Transparency и какие компоненты решения мы открыли для всех.

Почему сайты банков открываются в Яндекс Браузере, но не открываются в Chrome и Safari

Зачем сайту нужен сертификат

Когда вы открываете сайт банка, браузер должен не только зашифровать данные, но и убедиться, что перед ним настоящий сайт, а не его копия. Для этого нужен TLS-сертификат — своего рода цифровой паспорт сайта.

Браузер проверяет, для какого адреса выдан сертификат, не истёк ли его срок и кто его подписал. Если корневой сертификат выдавшего его центра есть во встроенном списке браузера, сайт открывается. Если нет — появляется предупреждение.

Именно это сейчас происходит с национальными сертификатами. Данные при этом шифруются по тому же стандартному протоколу TLS, что и при использовании сертификатов зарубежных удостоверяющих центров. Национальный сертификат сам по себе не делает соединение менее защищённым. Проблема в другом: корневого сертификата НУЦ нет во встроенном списке многих браузеров, поэтому они не могут проверить всю цепочку и подтвердить подлинность сайта. Просто проигнорировать предупреждение — плохая идея: такое же сообщение можно увидеть и при попытке открыть поддельную страницу.

С чего всё начиналось

Яндекс Браузер добавил поддержку национальных сертификатов ещё в 2022 году, когда некоторые российские сайты столкнулись с отзывом зарубежных сертификатов и отказами в выдаче новых. По сути, оставалось два пути: отказаться от шифрования и проверки подлинности сайта, чем быстро воспользовались бы злоумышленники, или перейти на сертификаты Национального удостоверяющего центра на базе Госуслуг. Мы поддержали второй вариант.

Сначала Браузер принимал национальный сертификат, только если Госуслуги проверили владельца сайта и добавили его домен в публичный список. Для остальных сайтов такой сертификат не применялся.

Это решение можно было запустить быстро, но для постоянной работы оно не подходило. Список показывал домены, но не содержал информации о выпущенных для них сертификатах. Кроме того, обновление списка и его доставка в Браузер могли занимать несколько дней.

От списка доменов — к открытым логам

Нам нужно было видеть не только домены, которым разрешено получать национальные сертификаты, но и каждый выпущенный сертификат. Для этого мы перешли на Certificate Transparency — открытый стандарт, который уже использовался в мировой индустрии.

В основе стандарта лежат публичные CT-логи. Удостоверяющий центр вносит в такой лог новый сертификат и получает подписанную метку — SCT (Signed Certificate Timestamp). Когда пользователь открывает сайт, Браузер проверяет наличие метки, адрес сайта, срок действия сертификата и всю цепочку подписей. Если хотя бы одна проверка не пройдена, соединение блокируется.

Запись о выпущенном сертификате нельзя незаметно удалить или изменить. Поэтому владелец сайта или внешний исследователь может обнаружить сертификат, который был выпущен по ошибке или без разрешения владельца домена.

За четыре года работы этой системы мы не зафиксировали ни одного случая её компрометации. При этом CT-логи остаются открытыми для внешней проверки — полагаться только на нашу оценку не требуется.

Код решения открыт для всех

Механизм поддержки национальных сертификатов работает внутри Яндекс Браузера. Он не добавляет корневой сертификат в системное хранилище и никак не влияет на правила доверия для других приложений на устройстве.

Чтобы разработчики могли проверить нашу реализацию и добавить такую поддержку в свои продукты, мы опубликовали код решения.

Первый проект — патч для Chromium. В нём есть поддержка корневого сертификата НУЦ, проверка CT-меток и тесты. Патч можно использовать как основу для добавления этой механики в любой браузер на базе Chromium.

Второй проект — библиотеки для Android и iOS. Они позволяют проверять национальные сертификаты и CT-метки в мобильных приложениях, в том числе при открытии сайтов во встроенном браузерном окне.

Открытый код не заменяет аудит, но делает его возможным. Любой разработчик или исследователь может изучить логику проверки, найти проблему и предложить исправление.

1122
44
11