dimayakovlev.ru


Как установить и удалить сертификаты НУЦ Минцифры России в Debian

Без установленных сертификатов Национального удостоверяющего центра Минцифры России пользователям будут недоступны большинство отечественных государственных и банковских онлайн-сервисов, например, популярные онлайн-сервисы СберБанка или ВТБ. Для доступа к таким онлайн-сервисам пользователи операционной системы Debian могут установить и использовать Яндекс.Браузер, в который требуемые сертификаты уже встроены. Яндекс.Браузер доступен в виде deb-пакета, поэтому с его установкой у пользователей не должно возникнуть проблем. Однако если нет желания менять привычный веб-браузер и устанавливать в систему дополнительное программное обеспечение, предпочтительным будет вариант с самостоятельной установкой сертификатов. Разберёмся с тем, как это сделать.

Для начала предлагаю посмотреть результат выполнение HTTP-запроса к веб-сайту СберБанка при помощи утилиты cURL в системе без установленных российских сертификатов.

curl -I https://www.sberbank.ru

В результате cURL сообщает о проблеме с сертификатами, а значит их всё-таки надо установить и после установки проверить результат.

Результат запроса cURL к веб-сайту СберБанка до установки российских сертификатов

Корневой и выпускающий сертификаты в формате PEM доступны для загрузки со специальной страницы портала государственных услуг Российской Федерации. Загрузить сертификаты можно вручную или при помощи утилиты Wget.

Для загрузки с помощью Wget понадобятся прямые ссылки на файлы сертификатов. На момент публикации файлы сертификатов доступны по адресам:

  • корневой сертификат: https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
  • выпускающий сертификат: https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt

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

Для примера оба сертификата будут сохранены в директорию ~/Downloads. Далее, во всех примерах команд, будут использоваться именно эти файлы.

wget -P ~/Downloads https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
wget -P ~/Downloads https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt

Установка сохранённых сертификатов в системное хранилище сертификатов Debian выполняется путём копирования их файлов в директорию /usr/local/share/ca-certificates. Для этого понадобится получить права суперпользователя.

sudo cp ~/Downloads/russian_trusted_{root_ca_pem.crt,sub_ca_pem.crt} /usr/local/share/ca-certificates

После копирования файлов сертификатов, надо обновить хранилище сертификатов для перестройки списка доступных сертификатов. Это делает утилита update-ca-certificates, запущенная от имени суперпользователя.

sudo update-ca-certificates -v

Завершив обновление хранилища сертификатов, при желании можно проверить доверие сертификатам при помощи утилиты openssl.

openssl verify russian_trusted_root_ca_pem.crt
openssl verify russian_trusted_sub_ca_pem.crt

На этом установка сертификатов в системное хранилище сертификатов Debian закончена. Теперь все программы, использующие системное хранилище сертификатов, будут использовать установленные сертификаты, и будут доверять веб-сайтам, защищённым сертификатами, выданным НУЦ Минцифры России.

Как теперь отработает утилита cURL?

curl -I https://www.sberbank.ru

Запрос выполнен успешно, значит проблема с сертификатами устранена.

Результат запроса cURL к веб-сайту СберБанка после установки российских сертификатов

Для примера на следующем скриншоте открыта страница проверки сертификатов НУЦ Минцифры России на веб-сайте СберБанка в веб-браузере GNOME Web.

Страница проверки сертификатов НУЦ Минцифры России на веб-сайте СберБанка, открытая в веб-браузере GNOME Web

Однако ни Mozilla Firefox, ни Google Chrome, ни Microsoft Edge, ни другие веб-браузеры на основе Chromium, не пройдут эту проверку, потому что не используют системное хранилище сертификатов Debian.

Для этих веб-браузеров можно импортировать сертификаты вручную через служебные страницы настроек. Это простой вариант решения задачи, но если он не подходит, следует воспользоваться утилитой certutil, входящей в состав пакета libnss3-tools. При помощи утилиты certutil сертификаты добавляются в базы данных сертификатов, которые используют эти веб-браузеры.

Если утилита не установлена, потребуется установить пакет libnss3-tools.

sudo apt install libnss3-tools

Актуальные на момент публикации версии веб-браузера Mozilla Firefox 107.0 и почтового клиента Mozilla Thunderbird 102.5 используют базы данных сертификатов в файлах cert9.db в директориях профилей пользователей. Веб-браузеры на основе Chromium также используют файл cert9.db, но из директории ~/.pki/nssdb/cert9.db.

Найти все файлы cert9.db в домашней директории пользователя можно при помощи утилиты find.

find ~/ -name "cert9.db"

Теперь, зная расположение нужного файла базы данных сертификатов, при помощи утилиты certutil в него можно добавить все требуемые сертификаты. Для примера, если файл базы данных сертификатов для веб-браузера Mozilla Firefox расположен по пути ~/.mozilla/firefox/kopstl44.default-esr/cert9.db, то добавить в него сертификаты можно при помощи следующих команд.

certutil -A -n "Russian Trusted Root CA" -t "TCu,Cu,Tu" -i ~/Downloads/russian_trusted_root_ca_pem.crt -d "sql:${HOME}/.mozilla/firefox/kopstl44.default-esr/"
certutil -A -n "Russian Trusted Sub CA" -t "TCu,Cu,Tu" -i ~/Downloads/russian_trusted_sub_ca_pem.crt -d "sql:${HOME}/.mozilla/firefox/kopstl44.default-esr/"

Результат выполнения - сертификаты установлены в Mozilla Firefox. Проверка сертификатов на веб-сайте СберБанка проходит успешно.

Российские сертификаты в списке установленных сертификатов в веб-браузере Mozilla Firefox

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

#!/bin/bash

certDir="${HOME}/Downloads"
certRootFile="${certDir}/russian_trusted_root_ca_pem.crt"
certSubFile="${certDir}/russian_trusted_sub_ca_pem.crt"
certRootName="Russian Trusted Root CA"
certSubName="Russian Trusted Sub CA"

for certDB in $(find ~/ -name "cert9.db")
do
echo "*** Process database: ${certDB}"
certDBDir=$(dirname ${certDB})
certutil -A -n "${certRootName}" -t "TCu,Cu,Tu" -i "${certRootFile}" -d "sql:${certDBDir}"
certutil -A -n "${certSubName}" -t "TCu,Cu,Tu" -i "${certSubFile}" -d "sql:${certDBDir}"
done

После завершения работы сценария во все найденные в домашней директории пользователя базы данных сертификатов cert9.db будут добавлены загруженные ранее сертификаты. Все веб-браузеры и другие программы, использующие эти базы данных сертификатов, будут работать с установленными в них сертификатами.

Удаление установленных сертификатов

Раз сертификаты были установлены, значит их можно и удалить. Причины для этого могут быть разными. Например, часть пользователей в силу собственных убеждений не доверяют отечественным средствам безопасности и видят в установленных сертификатов потенциальную угрозу своей конфиденциальности. На сколько эти опасения оправданы - тема отдельного разговора и конспирологических теорий.

Чтобы удалить сертификаты, установленные в системное хранилище сертификатов Debian, надо удалить файлы сертификатов и обновить хранилище сертификатов.

sudo rm /usr/local/share/ca-certificates/{russian_trusted_root_ca_pem.crt,russian_trusted_sub_ca_pem.crt}
sudo update-ca-certificates -f

Если установка сертификатов в веб-браузеры была выполнена вручную, их так же можно удалить вручную через служебные страницы настроек. Для удаления сертификатов, установленных автоматически в базы данных сертификатов в файлы cert9.db, следует снова воспользоваться утилитой certutil.

certutil -D -n "Russian Trusted Root CA" -t "TCu,Cu,Tu" -d "sql:${HOME}/.mozilla/firefox/kopstl44.default-esr/"
certutil -D -n "Russian Trusted Sub CA" -t "TCu,Cu,Tu" -d "sql:${HOME}/.mozilla/firefox/kopstl44.default-esr/"

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

#!/bin/bash

certRootName="Russian Trusted Root CA"
certSubName="Russian Trusted Sub CA"

for certDB in $(find ~/ -name "cert9.db")
do
echo "*** Process database: ${certDB}"
certDBDir=$(dirname ${certDB})
certutil -D -n "${certRootName}" -d "sql:${certDBDir}"
certutil -D -n "${certSubName}" -d "sql:${certDBDir}"
done

Рассмотренные способы установки российских корневых сертификатов подходят не только для пользователей операционной системы Debian, но и любых других Linux операционных систем, основанных на Debian, например, Ubuntu, KDE Neon и других.

Автоматизация процесса установки и удаления сертификатов с помощью сценариев Bash позволяет пользователям, сомневающимся в безопасности постоянного присутствия в системе российских корневых сертификатов, добиться использования сертификатов по требованию, без необходимости устанавливать отдельный браузер или создавать отдельную учётную запись пользователя.