В большинстве случаев http://localhost ведет себя как HTTPS в целях разработки. Однако существуют некоторые особые случаи , такие как пользовательские имена хостов или использование защищенных cookie в разных браузерах, когда вам необходимо явно настроить свой сайт для разработки так, чтобы он работал как HTTPS, чтобы точно отразить работу вашего сайта в рабочей среде. (Если ваш рабочий сайт не использует HTTPS, сделайте приоритетом переход на HTTPS ).
На этой странице объясняется, как запустить свой сайт локально с использованием HTTPS.
Для получения кратких инструкций см. краткое справочное руководство по mkcert .**
Запустите свой сайт локально с использованием HTTPS и mkcert (рекомендуется).
Для использования HTTPS с вашим локальным сайтом разработки и доступа к https://localhost или https://mysite.example (пользовательское имя хоста) вам необходим TLS-сертификат, подписанный организацией, которой доверяют ваше устройство и браузер, называемой доверенным центром сертификации (CA) . Браузер проверяет, подписан ли сертификат вашего сервера разработки доверенным центром сертификации, прежде чем устанавливать HTTPS-соединение.
Мы рекомендуем использовать mkcert , кроссплатформенный центр сертификации, для создания и подписи сертификата. Другие полезные параметры см. в разделе «Запуск сайта локально с HTTPS: другие варианты» .
Многие операционные системы включают библиотеки для создания сертификатов, например, openssl . Однако они сложнее и менее надежны, чем mkcert, и не обязательно являются кроссплатформенными, что делает их менее доступными для больших команд разработчиков.
Настраивать
Установите mkcert (только один раз).
Следуйте инструкциям по установке mkcert в вашей операционной системе. Например, в macOS:
brew install mkcert brew install nss # if you use FirefoxДобавьте mkcert в список локальных корневых центров сертификации.
В терминале выполните следующую команду:
mkcert -installЭто создаёт локальный центр сертификации (ЦС). Ваш локальный ЦС, созданный с помощью mkcert, будет считаться доверенным только локально , на вашем устройстве.
Сгенерируйте сертификат для вашего сайта, подписанный mkcert.
В терминале перейдите в корневой каталог вашего сайта или в любой другой каталог, где вы хотите хранить свой сертификат.
Затем выполните:
mkcert localhostЕсли вы используете пользовательское имя хоста, например
mysite.example, выполните следующую команду:mkcert mysite.exampleЭта команда выполняет две вещи:
- Генерирует сертификат для указанного вами имени хоста.
- Давайте подпишем сертификат с помощью mkcert.
Ваш сертификат готов и подписан центром сертификации, которому ваш браузер доверяет локально.
Настройте свой сервер для использования HTTPS с помощью только что созданного TLS-сертификата.
Подробности выполнения этой процедуры зависят от вашего сервера. Ниже приведены несколько примеров:
👩🏻💻 С помощью узла:
server.js(замените{PATH/TO/CERTIFICATE...}и{PORT}):const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('{PATH/TO/CERTIFICATE-KEY-FILENAME}.pem'), cert: fs.readFileSync('{PATH/TO/CERTIFICATE-FILENAME}.pem'), }; https .createServer(options, function (req, res) { // server code }) .listen({PORT});👩🏻💻 С помощью http-сервера :
Запустите сервер следующим образом (замените
{PATH/TO/CERTIFICATE...}):http-server -S -C {PATH/TO/CERTIFICATE-FILENAME}.pem -K {PATH/TO/CERTIFICATE-KEY-FILENAME}.pem-Sзапускает сервер с использованием HTTPS,-Cустанавливает сертификат, а-Kустанавливает ключ.👩🏻💻 С сервером разработки React:
Отредактируйте файл
package.jsonследующим образом, заменив{PATH/TO/CERTIFICATE...}:"scripts": { "start": "HTTPS=true SSL_CRT_FILE={PATH/TO/CERTIFICATE-FILENAME}.pem SSL_KEY_FILE={PATH/TO/CERTIFICATE-KEY-FILENAME}.pem react-scripts start"Например, если вы создали сертификат для
localhostв корневом каталоге вашего сайта:|-- my-react-app |-- package.json |-- localhost.pem |-- localhost-key.pem |--...Тогда ваш скрипт
startдолжен выглядеть примерно так:"scripts": { "start": "HTTPS=true SSL_CRT_FILE=localhost.pem SSL_KEY_FILE=localhost-key.pem react-scripts start"👩🏻💻 Другие примеры:
Откройте в браузере
https://localhostилиhttps://mysite.example, чтобы убедиться, что ваш сайт работает локально по протоколу HTTPS. Вы не увидите никаких предупреждений в браузере, потому что ваш браузер доверяет mkcert как локальному центру сертификации.
краткий справочник mkcert
Чтобы запустить локальный сайт разработки с использованием HTTPS:
Настройте mkcert.
Если вы еще этого не сделали, установите mkcert, например, на macOS:
brew install mkcert
Инструкции по установке mkcert для Windows и Linux см. в соответствующем разделе.
Затем создайте локальный центр сертификации:
mkcert -installСоздайте доверенный сертификат.
mkcert {YOUR HOSTNAME e.g. localhost or mysite.example}
Это создаёт действительный сертификат, который mkcert автоматически подписывает.
Настройте свой сервер разработки для использования HTTPS и сертификата, созданного на шаге 2.
Теперь вы можете получить доступ к https://{YOUR HOSTNAME} в своем браузере без предупреждений.
</div>
Запустите свой сайт локально с использованием HTTPS: другие варианты
Ниже описаны другие способы настройки сертификата. Как правило, они сложнее или рискованнее, чем использование mkcert.
Сертификат, подписанный собственноручно
Вы также можете отказаться от использования локального центра сертификации, такого как mkcert, и вместо этого подписать свой сертификат самостоятельно . У такого подхода есть несколько недостатков:
- Браузеры не доверяют вам как центру сертификации, поэтому они будут показывать предупреждения, которые вам нужно будет обходить вручную. В Chrome вы можете использовать флаг
#allow-insecure-localhostчтобы автоматически обходить это предупреждение наlocalhost. - Это небезопасно, если вы работаете в незащищенной сети.
- Это не обязательно проще или быстрее, чем использование локального центра сертификации, такого как mkcert.
- Самоподписанные сертификаты будут вести себя не совсем так же, как доверенные сертификаты.
- Если вы не используете этот метод в контексте браузера, вам необходимо отключить проверку сертификатов для вашего сервера. Забыть включить её повторно в рабочей среде приведёт к проблемам безопасности.

Если вы не укажете сертификат, параметры HTTPS сервера разработки React и Vue создадут самоподписанный сертификат автоматически. Это быстро, но сопряжено с теми же предупреждениями браузера и другими недостатками самоподписанных сертификатов. К счастью, вы можете использовать встроенную в фронтенд-фреймворки опцию HTTPS и указать локально доверенный сертификат, созданный с помощью mkcert или аналогичного инструмента. Для получения дополнительной информации см. пример использования mkcert с React .
Если вы открываете локально работающий сайт в браузере, используя HTTPS, ваш браузер проверяет сертификат вашего локального сервера разработки. Увидев, что вы сами подписали сертификат, он проверяет, зарегистрированы ли вы в качестве доверенного центра сертификации. Поскольку вы не зарегистрированы, ваш браузер не может доверять сертификату и отображает предупреждение о том, что ваше соединение небезопасно. Если вы продолжите, соединение HTTPS все равно будет установлено, но вы делаете это на свой страх и риск.

Сертификат, подписанный официальным центром сертификации.
Также можно использовать сертификат, подписанный официальным центром сертификации. Однако это сопряжено со следующими сложностями:
- При этом потребуется больше подготовительной работы, чем при использовании локального центра сертификации, например, mkcert.
- Вам необходимо использовать действительное доменное имя, которое находится под вашим контролем. Это означает, что вы не можете использовать официальные центры сертификации для следующих целей:
-
localhostи другие зарезервированные доменные имена, такие какexampleилиtest. - Любое доменное имя, которое вы не контролируете.
- Недопустимые домены верхнего уровня. Для получения дополнительной информации см. список допустимых доменов верхнего уровня .
-
Обратный прокси
Ещё один вариант доступа к локально работающему сайту по протоколу HTTPS — использование обратного прокси-сервера, например, ngrok . Однако это сопряжено со следующими рисками:
- Любой, кому вы предоставите URL-адрес обратного прокси, сможет получить доступ к вашему локальному сайту разработки. Это может быть полезно для демонстрации вашего проекта клиентам, но также может позволить неавторизованным лицам делиться конфиденциальной информацией.
- Некоторые сервисы обратного прокси-сервера взимают плату за использование, поэтому цена может стать важным фактором при выборе сервиса.
- Новые меры безопасности в браузерах могут повлиять на работу этих инструментов.
Пометить как не рекомендуется
Если вы используете пользовательское имя хоста, например mysite.example в Chrome, вы можете использовать флаг, чтобы заставить браузер считать mysite.example безопасным. Избегайте этого по следующим причинам:
- Необходимо быть на 100% уверенным, что
mysite.exampleвсегда разрешается в локальный адрес. В противном случае существует риск утечки учетных данных для работы в производственной среде. - Этот флаг работает только в Chrome, поэтому отладка в других браузерах невозможна.
Выражаю огромную благодарность всем рецензентам и участникам за их вклад и отзывы, особенно Райану Сливи, Филиппо Вальсорде, Милице Михайлови и Роуэну Меревуду. 🙌
Фоновое изображение для главной страницы предоставлено @anandu на Unsplash , отредактировано.
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2021-01-25 UTC.