- Где в Linux хранятся корневые сертификаты Центров Сертификации (CA)
- Mozilla Network Security Services (NSS)
- Google Chrome / Chromium
- Firefox
- Thunderbird
- Связанные статьи:
- Windows admin blog
- Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver
- Установка корневого сертификата в Astra Linux
Где в Linux хранятся корневые сертификаты Центров Сертификации (CA)
Консолидированный файл, включающий в себя все корневые сертификаты CA операционной системы, находится в файле /etc/ssl/certs/ca-certificates.crt. Этот файл может быть символической ссылкой на фактическое расположение сертификатов в файлах /etc/ssl/cert.pem или /etc/ca-certificates/extracted/tls-ca-bundle.pem.
Корневые CA сертификаты в виде отдельных файлов расположены в директории /etc/ssl/certs, в этой директории могут быть ссылки на фактическое расположение сертификатов, например, в /etc/ca-certificates/extracted/cadir/.
Для просмотра Subject всех корневых CA сертификатов в системе:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/;' < /etc/ssl/certs/ca-certificates.crt
Эти сертификаты используются утилитоми curl, wget и другими. Веб-браузеры Chromium и Firefox используют свои собственные хранилища корневых CA сертификатов.
Чтобы узнать, где веб браузеры хранять корневые CA сертификаты в Linux, нам нужно познакомиться с NSS.
Mozilla Network Security Services (NSS)
Network Security Services (NSS) это набор библиотек, разработанных для поддержки кросс-платформенной разработки защищенных клиентских и серверных приложений. Приложения построенные с использование NSS могут использовать SSL v2 и v3, TLS, PKCS#5, PKCS#7, PKCS#11, PKCS#12, S/MIME, сертификаты X.509 v3 и другие стандарты обеспечения безопасности.
В отличие от OpenSSL, NSS использует файлы базы данных в качестве хранилища сертификатов.
NSS начинается с жёстко закодированного списка доверенных сертификатов CA внутри файла libnssckbi.so. Этот список можно просмотреть из любого приложения, использующего NSS, способного отображать (и манипулировать) хранилищем доверенных сертификатов, например, Chrome-совместимые или Firefox-совместимые браузеры.
Некоторые приложения, использующие библиотеку NSS, используют хранилище сертификатов, отличное от рекомендованного. Собственный Firefox от Mozilla является ярким примером этого.
В вашем дистрибутиве скорее всего уже установлен пакет NSS, в некоторых дистрибутивах он называется libnss3 (Debian и производные) в некоторых — nss (Arch Linux, Gentoo и производные).
Если вы хотите просматривать и изменять хранилища сертификатов NSS, то понадобиться утилита certutil. В Arch Linux эта утилита входит в пакет nss и, следовательно, предустановлена в Arch Linux. А в Debian и производные установка делается так:
sudo apt install libnss3-tools
Google Chrome / Chromium
Как уже было сказано, при работе на Linux, Google Chrome использует библиотеку Mozilla Network Security Services (NSS) для выполнения верификации сертификатов.
Корневые CA сертификаты, которые добавил пользователь, хранятся в файле ~/.pki/nssdb/cert9.db, их можно просмотреть командой:
Поскольку Chrome не может удалить сертификаты из хранилища NSS, то если вы отключите некоторые из них в настройках веб браузера (Privacy and security → Manage certificates → Authorities), то в том же файле, где хранятся добавленные пользователем корневые CA сертификаты, будут сохранены изменения о полномочиях отключённого сертификата:
Используемые в Google Chrome / Chromium корневые CA сертификаты в Linux можно посмотреть следующим причудливым способом:
1. Найдите расположение файла libnssckbi.so (как было сказано в предыдущем разделе, в нём NSS хранит доверенные корневые сертификаты):
Примеры расположений этого файла:
- /usr/lib/libnssckbi.so
- /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
2. Теперь выполните команду вида:
ln -s /ПУТЬ/ДО/libnssckbi.so ~/.pki/nssdb
ln -s /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so ~/.pki/nssdb
2. Затем запустите команду:
certutil -L -d sql:$HOME/.pki/nssdb/ -h 'Builtin Object Token'
Вы увидите доверенные корневые сертификаты, которые использует Google Chrome в Linux.
Также вы можете просмотреть корневые CA сертификаты в настройках браузера:
Конфиденциальность и безопасность (выбрать «Ещё») → Настроить сертификаты → Центры сертификации, на английском это Privacy and security → Manage certificates → Authorities.
Firefox
Поскольку Firefox принадлежит Mozilla, то этот веб браузер, конечно, также использует Mozilla Network Security Services (NSS).
Стандартными расположениями папок с базами данных NSS являются:
- ~/.pki/nssdb (на уровне пользователей)
- /etc/pki/nssdb (на общесистемном уровне, может отсутствовать)
Firefox НЕ использует ни одно из этих стандартных расположений, база данных хранится в профиле пользователя, который имеет общий вид ~/.mozilla/firefox/СЛУЧАЙНЫЕ-БУКВЫ-ЦИФРЫ.default/cert9.db, например, ~/.mozilla/firefox/3k0r4loh.default/cert9.db.
Посмотреть корневые сертификаты CA которые использует Firefox в Linux можно следующей командой:
certutil -L -d ~/.mozilla/firefox/*.default/
У Firefox-esr это папка:
certutil -L -d ~/.mozilla/firefox/*.default-esr/
Также вы можете просмотреть корневые CA сертификаты в настройках браузера:
Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:
Thunderbird
Чтобы просмотреть, каким CA доверяет Thunderbird:
certutil -L -d ~/.thunderbird/*.default/
Чтобы найти все файлы cert9.db выполните команду:
Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».
Связанные статьи:
Windows admin blog
Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver
Установка корневого сертификата в Astra Linux
В данной статье рассмотрим, как установить корневой сертификат в системное хранилище доверенных корневых сертификатов. Здесь надо учесть, что браузеры после этого не станут автоматически доверять сайту, сертификат которого выпущен таким центром сертификации, потому что веб-браузеры в Linux используют свои собственные хранилища корневых сертификатов, поэтому будет затронута также тема добавления корневого сертификата в веб-браузеры. Инструкция подойдет не только для Astra Linux, но и для других Debian подобных дистрибутивов.
Установка корневого сертификата в системное хранилище
1. Сертификат должен иметь формат crt. Если формат сертификата отличается, необходимо выполнить его конвертацию. Так, например, для cer-сертификатов:
Если исходный сертификат имеет кодировку DER
openssl x509 -inform DER -in /path/certificate.cer -out certificate.crt
Если исходный сертификат имеет кодировку PEM
openssl x509 -inform PEM -in /path/certificate.cer -out certificate.crt
В параметре out можно сразу указать полный путь сохранения сертификата, в противном случае, он сохранится в текущий каталог.
2. Скопировать полученный сертификат в папку /usr/share/ca-certificates:
sudo cp /path/certificate.crt /usr/share/ca-certificates
вместо /path/certificate.crt подставить свой путь до сертификата и имя сертификата
Есть, однако, мнение, что сертификаты лучше копировать сюда: /usr/local/share/ca-certificates
3. Установить сертификат можно такой командой:
sudo dpkg-reconfigure ca-certificates
Выбрать «Да», нажать «ОК» (Enter), а в следующем окне отметить звездочками сертификаты, которые необходимо установить. При этом, если все успешно, вы должны увидеть информацию о добавлении вашего сертификата. В моем случае выполнялась установка сразу двух сертификатов (2 added)
Есть еще и вот такая команда:
sudo update-ca-certificates
По идее, делает все что нужно в автоматическом режиме.
По итогу, ваш сертификат должен будет находиться здесь: /etc/ssl/certs
Проверка установки
Короткая команда, которая выведет список доверенных сертификатов. В списке вы должны найти свой сертификат — значит он установился.
Для проверки есть такая конструкция:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/;' < /etc/ssl/certs/ca-certificates.crt | grep -i СЕРТИФИКАТ
Вместо СЕРТИФИКАТ вводим критерий поиска (точное имя сертификата), можно часть имени заменить символом * (например, Digi*) — но в случае со «звездочкой» поиск будет чувствителен к регистру (игнорирует ключ -i), если в имени серитфиката есть пробелы, то критерий поиска обязательно нужно взять в кавычки, даже при использовании маски поиска *.
openssl s_client -connect example.site.ru:443 -quiet
Проверка посредством выполнения подключения к сайту. То есть, здесь мы выполняем не поиск по хранилищу сертификатов, а осуществляем подключение к сайту
Вместо example.site.com вводите ваш сайт, на котором нужно проверить работу сертификата.
Если в результате вывода где-то есть verify error, значит есть проблемы с доверием. Нужно детально изучить вывод — на какой сертификат ругается.
curl https://example.site.com --cacert /etc/ssl/certs/ca-certificates.crt
Может потребоваться установка пакета curl. В ответе должен быть получен код страницы — значит все ОК, доверие к сертификату есть, в противном случае, получим ошибку.
Импорт сертификата в профиль пользователя для Chromium-подобных браузеров
Можно автоматизировать данный процесс. Для выполнения команды должна быть установлена утилита certutil.
certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "certificate_name" -i certificate_file.crt
certificate_name — имя сертификата
certificate_file — имя файла сертификата, в примере подразумевается, что сертификат расположен в том же каталоге, что и скрипт
После выполнения данной команды, браузеры на Chromium движке под текущим пользователем будут доверять сертификату (Chrome, Chromium, Opera и т.п.).
Отдельно отмечу, что браузер Firefox использует собственную базу сертификатов, которая располагается в другом месте.
Те же самые действия можно проделать и через GUI браузера.
Настройки — Конфиденциальность и безопасность — Безопасность — Настроить сертификаты
Далее импортировать нужный сертификат в разделе «Центры сертификации»