Как запустить Angular приложение с HTTPS сертификатом
Как включить HTTPS?
Angular CLI предоставляет нам три параметра, которые мы можем передать вместе с командой ng serve для включения и настройки SSL.
// enable or disable SSL --ssl <boolean: defaults to false> // path to root certificate --ssl-cert <string: defaults to "ssl/server.crt"> // path to private key --ssl-key <string: defaults to "ssl/server.key">
ng serve —-ssl true
- SSL включен.
- Проверьте, есть ли сертификат и закрытый ключ в стандартной папке ssl.
- Если ничего не найдено, CLI сгенерирует свой собственный сертификат и закрытый ключ.
ng serve \ --ssl true \ --ssl-cert "/home/john/ssl/example.crt" \ --ssl-key "/home/john/ssl/example.key"
- SSL включен.
- Проверьте, есть ли сертификат и закрытый ключ по указанному пути.
- Если ничего не найдено, CLI сгенерирует свой собственный сертификат и закрытый ключ.
Возможные проблемы
1. Certificate is not trusted
Браузер не доверяет нашему сертификату, поэтому мы получаем предупреждение.
Эту проблему довольно легко обойти. Просто игнорируем предупреждение и продолжаем использовать наше приложение.
Если у вас не возникает вторая проблема, и вы можете жить с тем, что у вас есть ненадежный сертификат, вы можете просто остановиться здесь и продолжить разработку вашего отличного приложения.
Эту проблему довольно легко обойти. Просто игнорируем предупреждение и продолжаем использовать наше приложение. Как вариант, сертификат можно добавить в trusted root authorities (для Windows).
2. Disconnect
Проблема возникает время от времени. Приложение может отключаться от сокета, который слушает событие, перезапускающее приложение, когда изменяется какой-то участок кода. Вместе с отключением приложение перезапускается несколько раз, повторяясь снова и снова.
На эту темы был заведен issue в github: https://github.com/angular/angular-cli/issues/5826
Решение
Чтобы решить все проблемы, нам нужно, чтобы наш браузер доверял нашему сертификату. Для решения понадобится утилита openssl. Для unix-систем она по умолчанию включена в терминал, а в Windows лучше всего воспользоваться git bash (утилита идет в комплекте с установкой git)
Шаг 1. Сгенерируйте сертификат
Заберите к себе репозиторий Generate Trusted Certificate на ваш компьютер и запустите скрипт generate.sh
в терминале или Git Bash. Репозиторий содержит всю необходимую конфигурацию для создания нового доверенного сертификата.
https://github.com/RubenVermeulen/generate-trusted-ssl-certificate
В папке с репозиторием будет создано 2 файла: server.crt
и server.key
.
Чтобы браузер доверял сертификату, его нужно установить на компьютер
- Дважды щелкните на сертификате (server.crt).
- Выберите желаемую цепочку ключей (для входа должно подойти login).
- Добавьте сертификат.
- Откройте Keychain Access, если он еще не открыт.
- Выберите ранее выбранную вами цепочку ключей.
- Вы увидите сертификат localhost.
- Дважды щелкните на сертификате.
- Разверните Trust.
- Выберите опцию Always Trust для When using this certificate.
- Закройте окно сертификата.
- Сертификат установлен.
- Дважды щелкните на сертификате (server.crt).
- Нажмите кнопку «Установить сертификат...».
- Выберите, хотите ли вы сохранить его на уровне пользователя или на уровне машины. (Лучше выбрать второе.
- Нажмите «Далее».
- Выберите «Разместить все сертификаты в следующем хранилище».
- Нажмите «Обзор».
- Выберите "Trusted Root Authorities" (Доверенные корневые центры) сертификации».
- Нажмите «ОК».
- Нажмите «Далее».
- Нажмите «Готово».
- Если появится запрос, нажмите «Да».
Шаг 3. Настройка Angular приложения
Теперь наш сертификат готов к использованию, и мы должны убедиться, что наше приложение использует правильный сертификат.
Создайте папку ssl в корне приложения.
angular-app: - e2e - src - ssl .angular-cli.json
Скопируйте закрытый ключ и корневой сертификат из шага 1 в папку ssl. Убедитесь, что имена файлов такие:
server.key (private key) server.crt (root certificate)
Перед запуском приложения убедитесь, что вы перезапустили браузер и обновили скрипт запуска в файле package.json.
"start": "ng serve --ssl true"