- Где в Linux хранятся корневые сертификаты Центров Сертификации (CA)
- Mozilla Network Security Services (NSS)
- Google Chrome / Chromium
- Firefox
- Thunderbird
- Связанные статьи:
- Добавляем корневой доверенный сертификат в Linux
- Установка корневого сертификата в Linux
- Добавить корневой доверенный сертификат для браузеров Mozilla, Chrome
Где в 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: принципы работы, создание сертификатов, аудит».
Связанные статьи:
Добавляем корневой доверенный сертификат в Linux
28.09.2022
itpro
CentOS, Linux, Ubuntu
комментария 4
В этой статье мы покажем, как добавить (установить) новый сертификат в список доверенных корневых сертификатов в Linux.
Например, вы используете на своем сайте самоподписанный SSL/TLS сертификат и не хотите, чтобы на клиентах при открытии сайта появлялась ошибка SEC_ERROR_UNKNOWN_ISSUER.
В данном примере мы установим в Linux корневой сертификат Минцифры (Russian Trusted Sub CA), на базе которого сейчас выпускаются сертификаты для сайтов многих компаний и гос-органов РФ.
Или это может быть самоподписанный сертификат с сайта IIS на Windows.
Чтобы проверить, что ваш хост Linux не может проверить (и соответственно не доверяет) SSL сертификату на определенном сайте, выполните команду:
$ curl –I https://www.sberbank.ru
curl: (60) SSL certificate problem: unable to get local issuer certificate. More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
В данном случае нам нужно добавить корневой центр сертификации этого сайта в список доверенных корневых сертификатов Linux.
Установка корневого сертификата в Linux
Для обновления хранилища доверенных сертификатов в Linux вам нужен файл сертификата в формате PEM с расширением файла .crt. PEM сертификат представляет собой текстовый файл в формате base64, который содержит в начале файла строку —-BEGIN CERTIFICATE—- и в конце ——END CERTIFICATE——.
Если ваш файл сертификата в формате DER, вы можете конвертировать его в PEM формат с помощью утилиты openssl:
$ openssl x509 -in my_trusted_sub_ca.der -inform der -out my_trusted_sub_ca.cer
Сначала рассмотрим, как добавит корневой сертификат вашего CA в доверенные в дистрибутивах Linux на базе DEB (Ubuntu, Debian, Mint, Kali Linux).
Скопируйте файлы ваших сертификаты в хранилище сертификатов в каталог usr/local/share/ca-certificates/:
$ sudo cp my_trusted_sub_ca.crt /usr/local/share/ca-certificates/
$ sudo cp my_trusted_root_ca.crt /usr/local/share/ca-certificates/
Обновите хранилище сертификатов командой:
$ sudo update-ca-certificates -v
$ sudo apt-get install -y ca-certificates
Если сертификаты успешно добавлены, появится сообщение о том, что сертфикат скопирован в /etc/ssl/certs/:
Updating certificates in /etc/ssl/certs… 2 added, 9 removed; done. Running hooks in /etc/ca-certificates/update.d
$ sudo dpkg-reconfigure ca-certificates
Выберите из списка сертификаты, которые нужно добавить в доверенные.
В Linux список доверенных сертификатов содержится в файле /etc/ssl/certs/ca-certificates.crt. Обе рассмотренные выше команды обновят этот файл и добавят в информацию о новых сертификатах.
Вы можете проверить, что ваши сертификаты были добавлены в доверенные с помощью команды:
Укажите часть Common Name вашего сертификата вместо YourCASubj для поиска в хранилище по subject.
Вы можете убедиться, что ваша ОС доверяет сертификату с помощью команду:
$ openssl verify my_trusted_sub_ca.crt
error 20 at 0 depth lookup: unable to get local issuer certificate error my_trusted_sub_ca.crt: verification failed
Теперь проверьте, что на сайте используется доверенный SSL сертификат с помощью curl:
$ curl –I https://www.sberbank.ru
Все ок, сертификат доверенные < HTTPOnly: secure >.
$ sudo mkdir /usr/share/ca-certificates/extra
Чтобы удалить сертификат, удалите ваш crt файл:
$ sudo rm /usr/local/share/ca-certificates/yourcert.crt
$ sudo update-ca-certificates --fresh
В дистрибутивах Linux на базе RPM (CentOS, Oracle, RHEL, Rocky Linux, Fedora) для добавления сертификата в доверенные:
- Установите пакет ca-certificates: # yum install ca-certificates
- Скопируйте файл сертификата в каталог /etc/pki/ca-trust/source/anchors/: # cp mycert.crt /etc/pki/ca-trust/source/anchors/
- Обновите хранилище:
# update-ca-trust force-enable
# update-ca-trust extract
Добавить корневой доверенный сертификат для браузеров Mozilla, Chrome
Теперь все системные утилиты будут доверять сайтам, использующим данный CA. Но это не повлияет на веб браузеры Mozilla Firefox или Google Chrome. Они по-прежнему будут показывать предупреждение о недоверенном сертификате.
Дело в том, что браузеры Firefox, Chromium, Google Chrome, Vivaldi и даже почтовый клиент Mozilla Thunderbird не используют системное хранилище сертификатов Linux. Хранилище сертификатов для этих программ находится в директории пользователя в файле cert8.db (для Mozilla) или cert9.db (для Chromium и Chrome). Для обновления этих хранилищ сертификатов используется утилита certutil из пакета libnss3-tools.
$ sudo apt install libnss3-tools
Теперь выполните следующие скрипты для добавления ваших сертификатов в хранилище через NSS:
#!/bin/bash
certfile="my_rusted_root_ca.crt"
certname="My Root CA1"
for certDB in $(find ~/ -name "cert8.db")
do
certdir=$(dirname $);
certutil -A -n "$" -t "TCu,Cu,Tu" -i $ -d dbm:$
done
for certDB in $(find ~/ -name "cert9.db")
do
certdir=$(dirname $);
certutil -A -n "$" -t "TCu,Cu,Tu" -i $ -d sql:$
done
После запуска скрипта, сайтам с данным CA будут доверять все браузеры.
Предыдущая статья Следующая статья