Angular: сертификаты игнорирования ng-serve - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу обслуживать приложение Angular по HTTPS, используя ng-serve --host 0.0.0.0. Мой проект использует Angular CLI 1.2.

Angular не распознает сертификаты, которые я предоставляю, а создает свои собственные. Сертификаты, которые я хочу использовать, являются .pem файлами.

Включение флага --ssl корректно выполняется с использованием HTTPS. Если я отключаю его, он возвращается к HTTP, поэтому этот флаг работает.

Я работаю в контейнере Docker. Я передаю сертификаты как том в файле compose, и они находятся там, где ожидается в контейнере, когда я проверяю с помощью docker exec -i <id> bash.

Все работает как положено, если я игнорирую ошибку неверного сертификата, как на стороне клиента, так и на стороне сервера. Проблема, которую я пытаюсь решить - заставить ng-serve использовать мои сертификаты.

Вот что я сделал:

  1. ng-serve --ssl true --ssl-cert <path-to-cert> --ssl-key <path-to-key> и варианты, например абсолютный / относительный путь.

  2. Установка вышеуказанных флагов в файле package.json.

  3. Установка моих .angular-cli.json значений по умолчанию:

    {
      ... 
      "defaults": {
        ...
        "serve": {
          "sslKey": "<relative-path>",
          "sslCert": "<relative-path>"
        },
        ...
      },
      ...
    }
    

Я попробовал ответы:

Получить угловую подачу по HTTPS

Запуск Angle Cli Ng Serve через https 2018

Шаги в этой статье также не работают: https://medium.com/@rubenvermeulen/running-angular-cli-over-https-with-a-trusted-certificate-4a0d5f92747a

1 Ответ

0 голосов
/ 15 ноября 2018

Вы не должны использовать ng serve в рабочем контейнере Docker, потому что он вызывает HTTP-сервер разработки, совсем не безопасный, просто предназначенный для локального тестирования приложения.Вот почему команда ng serve --prod выдает следующее предупреждение:

**************************************************************************************** 
This is a simple server for use in testing or debugging Angular applications locally. It hasn't been reviewed for security issues.

DON'T USE IT FOR PRODUCTION!
****************************************************************************************

Я приведу пример Dockerfile, оборачивающего приложение Angular с HTTP-сервером Nginx (одним из двух наиболее широко используемых серверов).:

FROM node:10.13.0-stretch as build-stage
WORKDIR /app
COPY package*.json /app/
RUN npm install
RUN npm install -g --unsafe-perm @angular/cli@latest
COPY ./ /app/
ARG configuration=production
RUN ng build --prod --build-optimizer=true --aot=true --output-hashing=all --extract-css=true --named-chunks=false --vendor-chunk=true

FROM nginx:1.14.1

# Add application files
COPY --from=build-stage /app/dist/name-of-your-app/ /var/www/html
COPY --from=build-stage /app/nginx/nginx.conf /etc/nginx/nginx.conf 
COPY --from=build-stage /app/nginx/site.conf /etc/nginx/conf.d/default.conf 

RUN touch /var/run/nginx.pid && \
    chown -R www-data: /etc/nginx/ && \
    chown -R www-data: /var/run/nginx.pid && \
    chown -R www-data: /var/cache/nginx && \
    chown -R www-data: /var/www/html

USER www-data

#Expose the port
EXPOSE 8080

STOPSIGNAL SIGTERM

CMD ["nginx", "-g", "daemon off;"]

При этом создаются два контейнера: первый устанавливает CLI и создает приложение, второй копирует файлы из «контейнера сборки» в его папку, обслуживаемую HTTP-сервером Nginx, затем первыйКонтейнер уничтожается.

Это предполагает, что у вас есть правильные nginx.conf и site.conf в папке nginx, в которой хранится ваша конфигурация сертификата (и, между прочим, вы должны добавить сертификат и файлы закрытого ключа вDockerfile тоже).Вы также можете использовать Apache в качестве HTTP-сервера.

...