Я использую CRA (Create React App) и привязываю его к local.example.com:443
, используя следующий файл .env
:
HOST=local.example.com
PORT=443
HTTPS=true
Это гарантирует, что когда я запускаю каркас CRA, он пытается выполнить привязку к local.example.com:443
и выдает самозаверяющий сертификат. Я могу принять самоподписанный в браузере и иметь локальный сайт с поддержкой HTTPS. HTTPS необходим для некоторых вещей, таких как файлы cookie Secure
и т. д., поэтому он нужен мне как для локальной разработки, так и для удаленного развертывания. Кроме того, proxy
можно установить на example.com
, чтобы локальный интерфейс использовал удаленный сервер при тестировании, что является еще одним мотивом для этой настройки.
Это работает, когда имя хоста (example.com
) не имеет HSTS, но когда оно есть, непринятый самозаверяющий сертификат, который создает CRA, отклоняется. Сертификат создается для localhost
, это первая проблема, потому что HSTS example.com
требует, чтобы сертификат был выдан для example.com
, чтобы быть действительным. Fire Fox:
Firefox не доверяет этому сайту, так как он использует сертификат, недействительный для local.example.com. Сертификат действителен только для следующих имен: localhost, localhost.localdomain, lvh.me, *.lvh.me, [::1], 127.0.0.1, fe80::1.
Но вдобавок ко всему, поскольку это самоподписанный сертификат, браузер отклонит его, если только пользователь не примет его первым, что можно сделать без HSTS, потому что страница с предупреждением о самоподписанном сертификате позволяет это сделать. , но с HSTS отображается другая страница с предупреждением (та, которая показывает указанную выше ошибку), в которой говорится, что HSTS не разрешает навигацию, и вы тост.
В Chrome можно игнорировать HSTS
, набрав letmein
на странице предупреждения HSTS, что работает, но это не решение в Firefox, и мне интересно, есть ли лучший способ.
Может ли CRA выдать сертификат так, как если бы он был выдан для example.com
, чтобы HSTS example.com
принял его? Я предполагаю, что все еще будет проблема с самозаверяющим сертификатом, но если это возможно, может быть, вместо этого будет показана страница с предупреждением о самозаверяющем сертификате, и пользователь сможет принять сертификат и продолжить?