Сегодня сайты нескольких российских банков перестали открываться в ряде браузеров после перехода на сертификаты Национального удостоверяющего центра. В Яндекс Браузере эти сайты продолжают работать без дополнительных настроек, а выпуск сертификатов контролируется через публичные логи Certificate Transparency. Напомним, как устроена проверка и какие компоненты мы опубликовали в открытом доступе.
Почему сайты банков перестали открываться
При открытии сайта браузер проверяет его TLS-сертификат: адрес, срок действия и цепочку подписей до доверенного корневого сертификата. Сайты банков перестали открываться после перехода на сертификаты Национального удостоверяющего центра, потому что его корневого сертификата нет во встроенных списках ряда браузеров. Они не могут проверить цепочку и подтвердить подлинность сайта. При этом для шифрования используется тот же протокол TLS, что и с сертификатами других удостоверяющих центров.
Как устроена проверка в Яндекс Браузере
Яндекс Браузер добавил поддержку национальных сертификатов ещё в 2022 году, когда некоторые российские сайты столкнулись с отзывом зарубежных сертификатов и отказами в выдаче новых. По сути, у нас было два пути: отказаться от шифрования и проверки подлинности сайта или поддержать сайты с национальными сертификатами. Мы выбрали второй вариант.
Корневой сертификат НУЦ поддерживается на уровне самого Браузера. Он не добавляется в системное хранилище устройства, поэтому правила доверия для других приложений не меняются. При этом одного корневого сертификата недостаточно: он позволяет проверить подпись удостоверяющего центра, но не обеспечивает публичный контроль за выпуском сертификатов.
Для такого контроля Яндекс Браузер использует публичные логи Certificate Transparency. Удостоверяющий центр записывает в лог каждый новый сертификат и получает подписанную метку SCT. При подключении браузер проверяет эту метку. Если метки нет или проверка не пройдена, соединение блокируется.
Запись в CT-логе нельзя незаметно удалить или изменить. Владелец домена или внешний исследователь может увидеть сертификат, выпущенный по ошибке или без его разрешения. Адреса, открытые ключи и технические параметры публичных логов опубликованы в открытом списке.
За четыре года мы не зафиксировали ни одного случая компрометации этого решения. Более подробно о нём мы рассказывали в двух статьях в нашем блоге на Хабре: о запуске поддержки национальных сертификатов и о проверке их выпуска с помощью Certificate Transparency.
Код решения открыт
Код проверки мы опубликовали в двух проектах. В репозитории domestic-roots-patch находится патч для Chromium с поддержкой корневого сертификата НУЦ, проверкой SCT и тестами. Его можно использовать как основу для других браузеров на Chromium.
В репозитории domestic-roots-mobile доступны библиотеки для Android и iOS. Они позволяют проверять национальные сертификаты и метки CT-логов в мобильных приложениях, в том числе при работе с WebView.
Исходный код можно изучить, использовать в своём продукте или предложить исправление.
Источник: habr.com