Как заставить Chrome принимать самоподписанный сертификат для localhost?
Я создал самоподписанный SSL-сертификат для localhost с общим именем (Common Name, CN). Firefox принимает этот сертификат после первоначального показа предупреждения, как и ожидалось. Однако Chrome и Internet Explorer отказываются принимать его, даже после добавления сертификата в системное хранилище сертификатов в раздел Доверенные корневые центры (Trusted Roots). Несмотря на то, что при нажатии на “Просмотр информации о сертификате” во всплывающем окне HTTPS в Chrome сертификат отображается как правильно установленный, Chrome все равно указывает, что сертификату нельзя доверять.
Какие шаги мне нужно предпринять, чтобы настроить Chrome на принятие моего самоподписанного сертификата для localhost и прекратить показ предупреждений безопасности?
Настройка Chrome для принятия самоподписанных сертификатов localhost
Chrome можно настроить на принятие самоподписанных сертификатов localhost путем импорта сертификата непосредственно в хранилище доверенных сертификатов Chrome, а не только в системное хранилище, или с помощью специальных флагов Chrome для обхода проверки сертификатов во время разработки. Наиболее надежный метод включает установку сертификата в настройках сертификатов Chrome через расширенные настройки безопасности или использование флага командной строки --ignore-certificate-errors для временных целей разработки.
Содержание
- Проблема с сертификатами в Chrome
- Метод 1: Установка сертификата непосредственно в Chrome
- Метод 2: Использование флагов командной строки Chrome
- Метод 3: Импорт сертификата в хранилище сертификатов Chrome
- Метод 4: Использование флагов Chrome для разработки
- Метод 5: Создание центра сертификации и его системная установка
- Устранение распространенных проблем
- Рекомендуемый рабочий процесс разработки
Проблема с сертификатами в Chrome
Chrome имеет более строгую проверку сертификатов по сравнению с другими браузерами, такими как Firefox. Когда вы добавляете самоподписанный сертификат в хранилище Доверенные корневые центры сертификации Windows, Chrome все равно может отклонить его, потому что:
- Chrome поддерживает собственное хранилище сертификатов, отдельное от системного
- Chrome выполняет дополнительные проверки проверки, включая статус отзыва сертификата
- Chrome может не распознавать сертификаты, которые не имеют правильных расширений для проверки подлинности сервера
Ключевое отличие заключается в том, что Firefox по умолчанию доверяет системному хранилищу сертификатов, в то время как Chrome выполняет собственную проверку. Именно поэтому ваш сертификат работает в Firefox, но не в Chrome, даже если он правильно установлен в хранилище сертификатов Windows.
Метод 1: Установка сертификата непосредственно в Chrome
Это наиболее прямой метод для того, чтобы Chrome доверял вашему самоподписанному сертификату:
- Откройте Chrome и перейдите на ваш HTTPS-сайт - Перейдите по адресу
https://localhostили вашему локальному URL разработки - Нажмите на значок замка в адресной строке рядом с URL
- Нажмите “Сертификат недействителен” или аналогичный текст предупреждения
- Нажмите “Соединение безопасно” → “Сертификат действителен” → “Сведения”
- Нажмите “Скопировать в файл” в диалоговом окне сертификата
- Выберите формат “Base-64 encoded X.509 (.CER)”
- Сохраните файл сертификата на рабочий стол
- Закройте диалоговое окно сертификата и вернитесь в Chrome
- Нажмите меню из трех точек → “Настройки” → “Конфиденциальность и безопасность” → “Безопасность”
- Нажмите “Управление сертификатами”
- На вкладке “Доверенные корневые центры сертификации” нажмите “Импорт”
- Перейдите к и выберите файл сертификата, который вы сохранили
- Завершите мастер импорта, убедившись, что вы выбрали “Поместить все сертификаты в следующее хранилище” и выбрали “Доверенные корневые центры сертификации”
Этот метод гарантирует, что Chrome специально доверяет вашему сертификату, добавляя его в собственное хранилище доверенных сертификатов.
Метод 2: Использование флагов командной строки Chrome
Для временных целей разработки вы можете запускать Chrome с флагами, которые обходят проверку сертификатов:
- Закройте все экземпляры Chrome
- Нажмите клавишу Windows + R, чтобы открыть диалоговое окно “Выполнить”
- Введите
chrome.exe, затем соответствующие флаги:--ignore-certificate-errors- Игнорировать все ошибки сертификатов--ignore-certifcate-errors-spki-list- Игнорировать ошибки сертификатов для определенных хэшей SPKI--allow-running-insecure-content- Разрешить смешанное содержимое--unsafely-treat-insecure-origin-as-secure=localhost:8443- Рассматривать определенные небезопасные источники как безопасные
Пример команды:
chrome.exe --ignore-certificate-errors --allow-running-insecure-content
- Создайте ярлык для удобного доступа:
- Щелкните правой кнопкой мыши по Chrome → Дополнительные инструменты → Создать ярлык
- Щелкните правой кнопкой мыши по новому ярлыку → Свойства
- Добавьте флаги в поле “Объект” после
chrome.exe
Примечание: Этот метод не рекомендуется для использования в продакшене, так как он обходит все проверки безопасности.
Метод 3: Импорт сертификата в хранилище сертификатов Chrome
Chrome поддерживает собственные хранилища сертификатов, которые отделены от системного хранилища Windows:
-
Экспортируйте ваш сертификат из хранилища сертификатов Windows в файл .pem или .crt
-
Откройте Chrome и перейдите к
chrome://settings/certificates -
Нажмите вкладку “Центры сертификации” (для корневых сертификатов) или “Другие лица” (для сертификатов конечных объектов)
-
Нажмите “Импорт”
-
Перейдите к вашему файлу сертификата и выберите его
-
Выберите соответствующее хранилище при появлении запроса:
- Для самоподписанных корневых сертификатов: “Доверенные корневые центры сертификации”
- Для серверных сертификатов: “Промежуточные центры сертификации” или “Другие лица”
-
Завершите процесс импорта
Chrome теперь будет доверять сертификатам, выданным вашим самоподписанным центром сертификации.
Метод 4: Использование флагов Chrome для разработки
Chrome имеет экспериментальные флаги, которые могут помочь с сертификатами разработки:
- Введите
chrome://flagsв адресной строке Chrome - Найдите “allow-insecure-localhost”
- Включите флаг “Разрешить недействительные сертификаты для ресурсов, загружаемых с localhost”
- Перезапустите Chrome при появлении запроса
Этот флаг специально позволяет Chrome принимать недействительные сертификаты с localhost, что именно вам нужно для разработки с самоподписанными сертификатами.
Альтернативные флаги для попытки:
#allow-insecure-localhost- Разрешает недействительные сертификаты на localhost#allow-running-insecure-content- Разрешает смешанное содержимое#ignore-certificate-errors-spki-list- Добавьте здесь хэш SPKI вашего сертификата
Метод 5: Создание центра сертификации и его системная установка
Для более надежного решения создайте собственный центр сертификации и установите его как доверенный корневой:
-
Создайте центр сертификации с помощью OpenSSL или аналогичного инструмента:
bashopenssl req -x509 -newkey rsa:4096 -keyout ca-key.pem -out ca-cert.pem -days 365 -nodes
-
Создайте ваш сертификат localhost, подписанный этим ЦС:
bashopenssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-req.pem openssl x509 -req -in server-req.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 365 -
Установите сертификат ЦС в хранилище Доверенные корневые центры сертификации Windows:
- Дважды щелкните файл
ca-cert.pem - Нажмите “Установить сертификат”
- Выберите “Локальный компьютер” и “Доверенные корневые центры сертификации”
- Завершите установку
- Дважды щелкните файл
-
Установите сертификат ЦС в хранилище сертификатов Chrome (как описано в методе 3)
Этот подход гарантирует, что все сертификаты, подписанные вашим ЦС, будут доверяться как Windows, так и Chrome.
Устранение распространенных проблем
Сертификат все еще не доверяется:
- Убедитесь, что сертификат установлен в хранилище сертификатов Chrome, а не только в Windows
- Проверьте, что у сертификата есть расширение EKU Проверка подлинности сервера
- Убедитесь, что Общее имя (CN) точно соответствует вашему домену localhost
Предупреждения о смешанном содержимом:
- Используйте флаг
--allow-running-insecure-content - Убедитесь, что все ресурсы загружаются через HTTPS или используйте относительные URL
- Проверьте наличие жестко закодированных HTTP-URL в вашем коде
Проблемы с отзывом сертификата:
- Chrome может попытаться проверить статус отзыва сертификата
- Используйте флаг
--ignore-certificate-errors-spki-listс хэшем SPKI вашего сертификата - Или временно отключите сетевое подключение во время тестирования
Различия версий Chrome:
- Chrome 58+ имеет более строгую проверку сертификатов
- Ранние версии могут быть более лояльны к самоподписанным сертификатам
- Рассмотрите возможность использования Chrome Beta для тестирования, если стабильная версия вызывает проблемы
Рекомендуемый рабочий процесс разработки
Для оптимального опыта разработки с самоподписанными сертификатами:
-
Создайте центр сертификации разработки как описано в методе 5
-
Установите сертификат ЦС как в хранилище Доверенные корневые центры сертификации Windows, так и в Chrome
-
Используйте флаг Chrome “Разрешить недействительные сертификаты для ресурсов, загружаемых с localhost”
-
Создайте ярлыки Chrome с флагами разработки для быстрого доступа
-
Рассмотрите возможность использования инструментов вроде mkcert, которые автоматизируют этот процесс:
bashnpm install -g mkcert mkcert -install mkcert localhost 127.0.0.1 ::1
-
Для командной разработки, распространяйте сертификат ЦС и убедитесь, что все разработчики его установили
-
Регулярно обновляйте сертификаты для поддержания безопасности во время разработки
Этот рабочий процесс обеспечивает баланс между безопасностью и удобством, позволяя вам разрабатывать с HTTPS, сохраняя при этом функции безопасности Chrome для просмотра веб-сайтов в продакшене.
Источники
- Справка Chrome - Ошибки сертификатов
- Документация OpenSSL - Создание сертификатов
- mkcert - Простой инструмент для создания локально доверенных сертификатов разработки
- Документация флагов Chrome
- Управление хранилищем сертификатов Windows
Заключение
Чтобы Chrome принимал самоподписанные сертификаты localhost, необходимо понять систему проверки сертификатов Chrome и использовать соответствующий метод установки. Наиболее надежные подходы включают установку сертификата непосредственно в хранилище сертификатов Chrome или создание центра сертификации разработки, которому Chrome доверяет. Для временных потребностей разработки флаги командной строки Chrome предоставляют быстрые решения, но должны использоваться с осторожностью. Следуя методам, описанным выше, вы можете устранить предупреждения о безопасности в Chrome, сохраняя безопасные привычки просмотра для других веб-сайтов. Для продолжающихся проектов разработки рассмотрите возможность использования автоматизированных инструментов вроде mkcert для упрощения управления сертификатами и обеспечения согласованности поведения в средах разработки.