Содержание

Клиентский SSL-сертификат в Linux: Chrome, Chromium, Firefox

Эта инструкция – продолжение статьи Настройка аутентификации по SSL сертификатам клиентов на Nginx. У вас есть файл user1.p12 с сертификатом и закрытым ключом и пароль от него. Осталось установить его в браузер.

В Linux нет общего системного хранилища для клиентских сертификатов, как в Windows или macOS. Каждое приложение использует свою базу NSS Shared Database:

БраузерГде хранятся сертификаты
Chrome, Chromium, Яндекс Браузер, Opera, Brave, Vivaldi, Edgeобщая база пользователя $HOME/.pki/nssdb
Chromium из Snap$HOME/snap/chromium/current/.pki/nssdb
Браузеры из Flatpak$HOME/.var/app/<id приложения>/.pki/nssdb
Firefoxсобственная база в каталоге профиля

Поэтому Chromium-браузеры достаточно настроить один раз, а Firefox – отдельно.

  1. Откройте Настройки → Конфиденциальность и безопасность → Безопасность → Настроить сертификаты (или сразу введите в адресной строке chrome://certificate-manager).
  2. Перейдите в раздел Ваши сертификаты (в старых версиях – вкладка Ваши сертификаты в окне Управление сертификатами).
  3. Нажмите Импорт, выберите файл user1.p12 и введите пароль от него.

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

Для работы с базой NSS нужен пакет утилит. Для Debian/Ubuntu/Mint:

sudo apt update
sudo apt install libnss3-tools

Для Fedora/CentOS/RHEL:

sudo dnf install nss-tools

Для Arch Linux утилиты входят в пакет nss.

Если базы еще нет (браузер ни разу не запускался), создайте ее:

mkdir -p $HOME/.pki/nssdb
certutil -d sql:$HOME/.pki/nssdb -N --empty-password

Импортируйте сертификат в формате PKCS#12 из файла .p12 или .pfx. Утилита запросит пароль от файла:

pk12util -d sql:$HOME/.pki/nssdb -i user1.p12

Посмотреть установленные сертификаты (-L) и закрытые ключи (-K):

certutil -d sql:$HOME/.pki/nssdb -L
certutil -d sql:$HOME/.pki/nssdb -K

Удалить ненужный сертификат вместе с закрытым ключом. Имя сертификата берите из вывода certutil -L:

certutil -d sql:$HOME/.pki/nssdb -F -n "Certificate Name"

Для Chromium из Snap или браузеров из Flatpak подставьте в команды путь к их базе из таблицы выше.

Откройте меню и выберите Настройки.

Меню Firefox

Перейдите в раздел Приватность и Защита, найдите блок Сертификаты и нажмите Просмотр сертификатов… Можно сразу открыть страницу about:preferences#privacy.

Блок «Сертификаты» в настройках Firefox

На вкладке Ваши сертификаты нажмите Импортировать…, выберите файл user1.p12 и введите пароль от него.

Окно «Управление сертификатами» в Firefox

Сертификат появится в списке. При первом заходе на сайт Firefox спросит, какой сертификат использовать. Если отметить Запомнить это решение, выбор сохранится на вкладке Решения по аутентификации – там же его можно сбросить.

Firefox использует ту же базу NSS, поэтому подойдут утилиты из пакета libnss3-tools / nss-tools. Нужно только указать каталог профиля. Узнать его можно на странице about:profiles – строка Корневой каталог у профиля по умолчанию. Обычно это:

  • $HOME/.mozilla/firefox/xxxxxxxx.default-release – Firefox из пакетов дистрибутива или с сайта Mozilla;
  • $HOME/snap/firefox/common/.mozilla/firefox/xxxxxxxx.default – Firefox из Snap (по умолчанию в Ubuntu);
  • $HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/xxxxxxxx.default-release – Firefox из Flatpak.

Перед импортом закройте Firefox, чтобы он не держал базу открытой.

PROFILE=$HOME/.mozilla/firefox/xxxxxxxx.default-release
pk12util -d sql:$PROFILE -i user1.p12
certutil -d sql:$PROFILE -L

Если на базе Firefox установлен главный пароль, pk12util сначала спросит его, а затем пароль от файла .p12.

Удаление выполняется так же, как для Chromium:

certutil -d sql:$PROFILE -F -n "Certificate Name"
  • Браузер не предлагает выбрать сертификат. Проверьте, что сертификат подписан тем центром сертификации, который указан в ssl_client_certificate в настройках nginx, и что у CA и клиента разные поля Organization Name.
  • Выбран не тот сертификат. Chromium запоминает выбор до перезапуска браузера – закройте все его окна. В Firefox удалите запись на вкладке Решения по аутентификации.
  • Ошибка пароля при импорте. Убедитесь, что пароль правильный. Если файл создан очень старой версией OpenSSL с устаревшими алгоритмами, пересоздайте его современной версией.
  • Проверка без браузера. Если curl --cert user1.crt --key user1.key https://example.com проходит, а браузер нет – проблема в установке сертификата, а не в настройках сервера.

Инструкции для других систем: Windows, macOS, Android и iOS.

Похожее