Содержание

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

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

В Windows все просто: у системы есть общее хранилище сертификатов пользователя (Личное), и браузеры берут клиентские сертификаты из него:

  • Chrome, Edge, Яндекс Браузер, Opera, Brave, Vivaldi – только из системного хранилища;
  • Firefox начиная с версии 90 тоже видит сертификаты из системного хранилища, а кроме того имеет собственное.

Поэтому достаточно один раз установить сертификат в систему, и он будет доступен всем браузерам.

Сертификат ставится в хранилище текущего пользователя – права администратора не нужны.

  1. Дважды щелкните по файлу user1.p12. Откроется Мастер импорта сертификатов.
  2. Расположение хранилища – оставьте Текущий пользователь и нажмите Далее.
  3. Путь к файлу уже подставлен – нажмите Далее.
  4. Введите пароль от файла. Параметры импорта:
    • Пометить этот ключ как экспортируемый – не отмечайте, если пользователю не нужно переносить ключ на другие устройства. Так закрытый ключ нельзя будет выгрузить из системы;
    • Включить усиленную защиту закрытого ключа – по желанию. Windows будет спрашивать подтверждение (или пароль) при каждом использовании ключа.
  5. Выберите Автоматически выбрать хранилище на основе типа сертификата – сертификат с ключом попадет в Личное.
  6. Нажмите Готово. Должно появиться сообщение Импорт успешно выполнен.

Тот же мастер можно открыть из браузера: в Chrome и Edge это Настройки → Конфиденциальность и безопасность → Безопасность → Управление сертификатами (в новых версиях – Управление сертификатами, импортированными из Windows), кнопка Импорт.

Проверить установленные сертификаты можно в оснастке certmgr.msc (Win + R → certmgr.msc): раздел Личное → Сертификаты. Там же сертификат удаляется – правой кнопкой Удалить.

Пароль лучше вводить интерактивно, чтобы он не остался в истории команд:

$password = Read-Host -AsSecureString -Prompt "Пароль от p12"
Import-PfxCertificate -FilePath .\user1.p12 -CertStoreLocation Cert:\CurrentUser\My -Password $password

По умолчанию закрытый ключ импортируется как неэкспортируемый. Чтобы разрешить экспорт, добавьте параметр -Exportable.

Посмотреть установленные сертификаты:

Get-ChildItem Cert:\CurrentUser\My | Format-List Subject, Issuer, Thumbprint, NotAfter

Удалить сертификат вместе с закрытым ключом:

Get-ChildItem Cert:\CurrentUser\My | Where-Object Subject -like "*CN=user1*" | Remove-Item -DeleteKey

Утилита certutil есть в любой Windows и работает в обычной командной строке. Ключ -user обязателен – без него сертификат попадет в хранилище компьютера, и потребуются права администратора. Пароль утилита спросит сама.

certutil -user -importpfx user1.p12 NoExport

Посмотреть сертификаты в хранилище Личное:

certutil -user -store My

Удалить сертификат по серийному номеру или имени из вывода предыдущей команды:

certutil -user -delstore My "user1"

Начиная с версии 90 Firefox автоматически использует сертификаты из системного хранилища Windows. Если вы установили сертификат способами выше, больше ничего делать не нужно – при заходе на сайт Firefox предложит его выбрать.

Если Firefox не видит сертификат, откройте about:config и проверьте, что параметр security.osclientcerts.autoload равен true.

Можно установить сертификат только в Firefox, не трогая систему: Настройки → Приватность и Защита → Сертификаты → Просмотр сертификатов… → Ваши сертификаты → Импортировать… Так сертификат будет доступен только в этом профиле Firefox.

При каждом новом запуске браузер спрашивает, какой сертификат использовать. Если у пользователя он один, выбор можно автоматизировать политикой AutoSelectCertificateForUrls. Например, для Chrome создайте в реестре строковый параметр:

reg add "HKCU\Software\Policies\Google\Chrome\AutoSelectCertificateForUrls" /v 1 /t REG_SZ /d "{\"pattern\":\"https://example.com\",\"filter\":{\"ISSUER\":{\"O\":\"Company Name\"}}}"

В фильтре укажите Organization Name вашего центра сертификации. Для Edge используйте раздел HKCU\Software\Policies\Microsoft\Edge\AutoSelectCertificateForUrls. Применение политики можно проверить на странице chrome://policy или edge://policy.

  • Браузер не предлагает выбрать сертификат. Проверьте в certmgr.msc, что сертификат лежит в Личное и у него есть закрытый ключ (на значке ключик, в свойствах – «Есть закрытый ключ для этого сертификата»). Если сертификат попал в Другие пользователи или Доверенные корневые центры, удалите его и импортируйте заново в Личное.
  • Выбран не тот сертификат. Chrome и Edge запоминают выбор до перезапуска браузера – закройте все его окна, включая фоновые процессы в трее.
  • Сервер отклоняет сертификат. Проверьте, что он подписан тем центром сертификации, который указан в ssl_client_certificate в настройках nginx, и что у CA и клиента разные поля Organization Name.

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

Похожее