
Самоподписанные сертификаты используются для тестирования, внутренних сетей и локальных разработок, но по умолчанию браузеры и операционные системы не доверяют им. Это приводит к ошибкам типа NET::ERR_CERT_AUTHORITY_INVALID в Chrome или SEC_ERROR_UNKNOWN_ISSUER в Firefox. Чтобы избежать этих проблем, сертификат нужно вручную добавить в хранилище доверенных.
Процесс отличается в зависимости от ОС и браузера. В Windows сертификаты импортируются через certmgr.msc в раздел Доверенные корневые центры сертификации. В Linux (Debian/Ubuntu) файл сертификата с расширением .crt или .pem копируется в /usr/local/share/ca-certificates/, после чего выполняется команда sudo update-ca-certificates. Для macOS используется утилита Keychain Access, где сертификат добавляется в связку Система с пометкой Всегда доверять.
В браузерах на базе Chromium (Chrome, Edge, Opera) сертификат можно добавить через настройки безопасности: chrome://settings/security → Управление сертификатами. Firefox использует собственное хранилище – сертификат импортируется через about:preferences#privacy → Просмотр сертификатов → Импорт. После добавления рекомендуется перезапустить браузер и проверить доступность сайта без предупреждений.
Важно: самоподписанные сертификаты не обеспечивают защиту от MITM-атак, так как не проходят проверку у доверенного центра сертификации. Для продакшен-сред используйте сертификаты от Let’s Encrypt или платных CA. Если сертификат генерируется локально, убедитесь, что он содержит корректные поля CN (Common Name) и SAN (Subject Alternative Name), иначе браузеры могут отклонить его даже после добавления в доверенные.
Проверка наличия самоподписанного сертификата на устройстве
На Windows откройте оснастку certmgr.msc для пользовательских сертификатов или certlm.msc для системных. В разделе «Доверенные корневые центры сертификации» найдите сертификат по имени издателя или отпечатку SHA-1. Альтернатива – PowerShell: выполните Get-ChildItem -Path Cert:\LocalMachine\Root | Where-Object { $_.Thumbprint -eq "ОТПЕЧАТОК" }, заменив «ОТПЕЧАТОК» на фактический хеш. На Linux проверьте содержимое /etc/ssl/certs/ или выполните openssl x509 -in /путь/к/сертификату.crt -text -noout для анализа метаданных.
На macOS используйте Keychain Access: выберите категорию «Системные» или «Логин», в поиске введите имя сертификата. Для командной строки – security find-certificate -c "ИМЯ_СЕРТИФИКАТА" /Library/Keychains/System.keychain. На Android откройте «Настройки» → «Безопасность» → «Шифрование и учетные данные» → «Доверенные сертификаты» и ищите сертификат в списке пользовательских. Для iOS перейдите в «Настройки» → «Основные» → «VPN и управление устройством» – самоподписанные сертификаты отображаются в разделе «Установленные профили».
Экспорт самоподписанного сертификата в файл формата .cer или .pem
Для экспорта самоподписанного сертификата из хранилища Windows используйте оснастку certmgr.msc. Откройте её через меню «Выполнить» (Win + R), введите команду и нажмите Enter. В разделе «Личные» → «Сертификаты» найдите нужный сертификат, щёлкните правой кнопкой мыши и выберите «Все задачи» → «Экспортировать». Мастер предложит выбрать формат: для .cer используйте DER-кодировку, для .pem – Base64-кодировку.
В Linux или macOS экспортируйте сертификат из хранилища с помощью OpenSSL. Команда для извлечения в формате .pem: openssl x509 -in /etc/ssl/certs/your_cert.crt -out cert.pem -outform PEM. Если сертификат в бинарном формате (DER), добавьте флаг -inform DER. Для конвертации в .cer замените -outform PEM на -outform DER и укажите расширение .cer.
При экспорте через браузер Chrome откройте страницу с сертификатом (chrome://settings/certificates), перейдите на вкладку «Ваши сертификаты», выберите нужный и нажмите «Экспорт». Chrome предложит сохранить файл в формате .p12 или .pfx – извлеките сертификат командой openssl pkcs12 -in cert.p12 -clcerts -nokeys -out cert.pem. Для получения .cer добавьте -outform DER.
Формат .pem удобен для интеграции с веб-серверами (Nginx, Apache) и инструментами вроде cURL. Он содержит сертификат в текстовом виде с заголовками -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. Формат .cer (DER) чаще используется в Windows-системах и Java-приложениях, так как является бинарным и не требует дополнительной обработки.
Храните экспортированные файлы в защищённом каталоге с правами доступа 600 (Linux/macOS) или ограничьте доступ через ACL (Windows). Избегайте передачи сертификатов по незащищённым каналам – используйте scp, sftp или зашифрованные архивы. При интеграции в приложения указывайте полный путь к файлу, например: SSLCertificateFile /etc/ssl/certs/cert.pem (Apache).
Добавление сертификата в хранилище доверенных корневых центров сертификации Windows

Хранилище доверенных корневых центров сертификации Windows (Trusted Root Certification Authorities) содержит сертификаты, которым операционная система автоматически доверяет при проверке цепочек сертификатов. Добавление самоподписанного сертификата в это хранилище требует прав администратора и выполняется через оснастку certmgr.msc или командную строку. Процесс актуален для локальных сертификатов, используемых в тестовых средах, внутренних сервисах или разработке.
Для ручного добавления откройте certmgr.msc через меню «Выполнить» (Win + R). Перейдите в раздел Доверенные корневые центры сертификации → Сертификаты. Щелкните правой кнопкой мыши на пустом пространстве, выберите Все задачи → Импорт. Мастер импорта предложит указать путь к файлу сертификата (форматы .cer, .crt или .pem). Убедитесь, что сертификат содержит открытый ключ и поле Subject с корректными данными.
При импорте через командную строку используйте утилиту certutil. Команда для добавления сертификата из файла cert.crt в хранилище доверенных корневых центров:
certutil -addstore -f "Root" cert.crt
Ключ -f принудительно перезаписывает существующий сертификат с тем же отпечатком. После выполнения проверьте результат командой:
certutil -store Root
Для автоматизации процесса в скриптах PowerShell используйте модуль PKI. Пример добавления сертификата из переменной $cert:
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("Root", "LocalMachine")
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($cert)
$store.Close()
Метод Add() выбрасывает исключение, если сертификат уже существует. Для обработки ошибок добавьте блок try-catch.
После импорта сертификата проверьте его доступность через браузер или утилиту openssl. Для Edge/Chrome выполните:
openssl s_client -connect example.com:443 -showcerts
Распространенные ошибки при добавлении сертификатов:
| Ошибка | Причина | Решение |
|---|---|---|
CertUtil: -addstore command FAILED: 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED) |
Отсутствие прав администратора | Запустите командную строку от имени администратора |
Cannot find the certificate and private key for decryption |
Сертификат не содержит закрытый ключ | Используйте файл .pfx или .p12 с закрытым ключом |
| Сертификат не отображается в хранилище | Некорректный формат файла | Конвертируйте сертификат в .cer через openssl x509 -in cert.pem -outform der -out cert.cer |
Для удаления сертификата используйте команду:
certutil -delstore "Root" "thumbprint"
Где thumbprint – отпечаток сертификата, который можно получить через certmgr.msc (свойства сертификата → вкладка Состав) или командой:
certutil -store Root | findstr "Serial Number"
Удаление актуально при ротации сертификатов или устранении конфликтов с дубликатами.
Импорт сертификата в доверенные на macOS через Keychain Access
Откройте Keychain Access через Spotlight (Cmd + Пробел), введите название приложения и нажмите Enter. В левой панели выберите категорию Login или System – первая хранит сертификаты для текущего пользователя, вторая – для всех учётных записей. Перетащите файл сертификата (расширение .cer, .crt или .pem) в окно Keychain Access или используйте меню File → Import Items для выбора файла через диалог.
После импорта найдите сертификат в списке, дважды кликните по нему и разверните секцию Trust. В выпадающем меню When using this certificate установите значение Always Trust. Закройте окно – система запросит пароль администратора для подтверждения изменений. Если сертификат не отображается, проверьте фильтр поиска в верхней части окна или перезапустите Keychain Access.
В macOS Ventura и новее Keychain Access может блокировать импорт самоподписанных сертификатов из-за политики безопасности. Чтобы обойти это, временно отключите SIP (System Integrity Protection) через режим восстановления или используйте утилиту security в терминале: sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /путь/к/сертификату.crt. Этот метод требует прав администратора и применяется ко всем пользователям системы.
После успешного импорта перезапустите браузеры и приложения, использующие сертификат, чтобы изменения вступили в силу. В Safari и Chrome проверьте статус сертификата на сайте через Developer Tools → Security. Если возникают ошибки типа «NET::ERR_CERT_AUTHORITY_INVALID», очистите кэш браузера или перезагрузите систему – macOS иногда кэширует цепочки доверия.
Установка самоподписанного сертификата в браузере Chrome и Firefox

Самоподписанные сертификаты часто используются в локальных сетях или тестовых средах, но браузеры по умолчанию их не доверяют. В Chrome и Firefox процедура добавления сертификата в хранилище доверенных отличается из-за различий в архитектуре. Chrome полагается на системное хранилище сертификатов Windows или macOS, а Firefox использует собственное хранилище NSS.
Для Chrome на Windows откройте Панель управления → Свойства браузера → Содержание → Сертификаты. Перейдите на вкладку Доверенные корневые центры сертификации и нажмите Импорт. Укажите путь к файлу сертификата (обычно .crt или .pem) и подтвердите добавление. После перезапуска Chrome предупреждения о недоверенном соединении исчезнут.
На macOS Chrome использует хранилище Keychain. Откройте Keychain Access, перетащите файл сертификата в раздел Login или System. Дважды кликните по сертификату, разверните Доверие и выберите Всегда доверять для параметра При использовании этого сертификата. Сохраните изменения – Chrome начнет доверять сертификату без перезапуска.
Firefox игнорирует системное хранилище и требует ручной настройки. Откройте Настройки → Конфиденциальность и защита → Сертификаты → Просмотр сертификатов. Перейдите на вкладку Центры сертификации и нажмите Импортировать. Выберите файл сертификата и отметьте Доверять этому CA для идентификации веб-сайтов. Подтвердите действие – Firefox добавит сертификат в список доверенных.
Если сертификат не применяется, проверьте его формат. Firefox поддерживает .crt, .pem и .der, но Chrome на Windows может требовать преобразования в .pfx с помощью OpenSSL: openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem. Убедитесь, что срок действия сертификата не истек и он содержит корректный Common Name (CN), совпадающий с доменом сайта.
Для Linux Chrome использует хранилище nssdb, аналогичное Firefox. Установите сертификат через терминал: certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "MyCert" -i cert.pem. Параметр -t "C,," задает уровень доверия: C – доверенный корневой CA. После выполнения команды перезапустите браузер.
При возникновении ошибок SEC_ERROR_UNKNOWN_ISSUER в Firefox или NET::ERR_CERT_AUTHORITY_INVALID в Chrome убедитесь, что сертификат импортирован в правильное хранилище. Для диагностики используйте инструменты разработчика (F12 → Security в Chrome или Инструменты → Информация о странице в Firefox), чтобы проверить цепочку доверия. Если проблема сохраняется, удалите сертификат и повторите импорт с корректными настройками доверия.
Настройка доверия к сертификату в Linux через командную строку

В Linux управление доверенными сертификатами осуществляется через системные хранилища, расположенные в каталогах /etc/ssl/certs/ и /usr/local/share/ca-certificates/. Для добавления самоподписанного сертификата скопируйте его файл с расширением .crt или .pem в /usr/local/share/ca-certificates/. Пример команды:
sudo cp /путь/к/сертификату.crt /usr/local/share/ca-certificates/
После копирования обновите системный кеш сертификатов командой sudo update-ca-certificates. Эта утилита автоматически создаст символические ссылки в /etc/ssl/certs/ и обновит файл /etc/ssl/certs/ca-certificates.crt, который используется большинством приложений для проверки доверия.
Для проверки успешности добавления сертификата используйте openssl. Выполните команду:
openssl verify /etc/ssl/certs/ваш_сертификат.pem
В дистрибутивах на базе RHEL (CentOS, Fedora) процесс отличается. Скопируйте сертификат в /etc/pki/ca-trust/source/anchors/, затем выполните:
sudo update-ca-trust extract
Эта команда обновит хранилище в /etc/pki/ca-trust/extracted/. Для приложений, использующих NSS (например, Firefox), дополнительно потребуется импорт через certutil:
certutil -A -n "ИмяСертификата" -t "C,," -d sql:/etc/pki/nssdb -i /путь/к/сертификату.crt
Удаление сертификата из доверенных выполняется обратным порядком: удалите файл из каталога /usr/local/share/ca-certificates/ или /etc/pki/ca-trust/source/anchors/, затем повторно запустите update-ca-certificates или update-ca-trust. Для проверки списка доверенных сертификатов используйте:
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/ cmd' < /etc/ssl/certs/ca-certificates.crt
Проверка успешности добавления сертификата в доверенные
После импорта самоподписанного сертификата в хранилище доверенных корневых центров сертификации (например, через certmgr.msc в Windows или update-ca-certificates в Linux) выполните проверку с помощью инструментов командной строки. В Windows используйте:
certutil -verify -urlfetch сертификат.crt– анализирует цепочку доверия и проверяет статус отзыва.openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt сертификат.crt– для Linux-систем (путь к хранилищу может отличаться).
В корпоративных средах дополнительно протестируйте доступ к ресурсам через скрипты или приложения, использующие библиотеки с поддержкой TLS (например, Python с requests или Java с HttpsURLConnection). Пример проверки в Python:
- Установите пакет:
pip install requests. - Запустите скрипт:
import requests response = requests.get("https://ваш-домен", verify=True) print(response.status_code)
Устранение ошибок при добавлении самоподписанного сертификата
Ошибка SEC_ERROR_UNKNOWN_ISSUER в Firefox возникает, если сертификат не добавлен в хранилище доверенных корневых центров сертификации. Проверьте путь к сертификату через about:preferences#privacy, раздел «Сертификаты» → «Просмотр сертификатов». Убедитесь, что файл имеет расширение .crt или .pem и содержит только один сертификат без лишних данных. Если сертификат импортирован, но ошибка сохраняется, очистите кэш браузера и перезапустите сессию.
В Windows ошибка 0x800B0109 при установке через оснастку certmgr.msc указывает на неверный формат файла. Конвертируйте сертификат в DER через OpenSSL: openssl x509 -in cert.pem -outform der -out cert.der. При импорте выберите хранилище «Доверенные корневые центры сертификации» вручную – автоматический выбор может поместить сертификат в неверную папку. После установки перезагрузите систему, чтобы изменения вступили в силу.
На Linux-системах с NSS (используется Firefox, Chrome) добавление сертификата через certutil может завершиться ошибкой SEC_ERROR_BAD_DATABASE, если база данных повреждена. Удалите файл cert9.db в профиле браузера и повторите команду: certutil -A -n "MyCert" -t "C,," -d sql:$HOME/.pki/nssdb -i cert.pem. Для систем с OpenSSL проверьте путь к сертификату в /etc/ssl/certs и обновите символические ссылки командой c_rehash.
Ошибка SSL_ERROR_BAD_CERT_DOMAIN означает несоответствие домена в сертификате и адреса в браузере. Если сертификат выдан для localhost, а запрос идет на 127.0.0.1, добавьте альтернативное имя (SAN) при генерации: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1". Для тестирования используйте флаг --insecure в curl или отключите проверку домена в настройках приложения.
В macOS ошибка «Не удалось установить доверие для этого сертификата» при добавлении через Keychain Access возникает, если сертификат не помечен как доверенный. Дважды кликните на сертификат в связке ключей, разверните раздел «Доверие» и выберите «Всегда доверять» для параметра SSL. Если сертификат не отображается, убедитесь, что он импортирован в связку login, а не System. Для приложений на базе Python или Node.js укажите путь к сертификату через переменную окружения: export SSL_CERT_FILE=/path/to/cert.pem.
