【问题标题】:Angular: ng-serve ignoring certificatesAngular:ng-serve 忽略证书
【发布时间】:2019-04-18 13:10:27
【问题描述】:

我想使用 ng-serve --host 0.0.0.0 通过 HTTPS 为 Angular 应用程序提供服务。我的项目使用 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>"
        },
        ...
      },
      ...
    }
    

我已经尝试了答案:

Get angular-cli to ng serve over HTTPS

Run Angular Cli Ng Serve over https 2018

本文中的步骤也不起作用: https://medium.com/@rubenvermeulen/running-angular-cli-over-https-with-a-trusted-certificate-4a0d5f92747a

【问题讨论】:

    标签: angular docker ssl angular-cli


    【解决方案1】:

    您不应该在生产 Docker 容器中使用 ng serve,因为它调用开发 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!
    ****************************************************************************************
    

    我会给你一个用 Nginx HTTP 服务器(两个最广泛使用的服务器之一)包装 Angular 应用程序的 Dockerfile 示例:

    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 并构建应用程序,第二个容器将文件从“构建容器”复制到由 Nginx HTTP 服务器提供服务的文件夹,然后第一个容器被销毁。

    这假设您在 nginx 文件夹中有正确的 nginx.confsite.conf 来保存您的证书配置(顺便说一下,您还必须在 Dockerfile 中添加证书和私钥文件)。 您也可以使用 Apache 作为 HTTP 服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-01
      • 2023-03-31
      • 1970-01-01
      • 2011-11-16
      • 2013-10-16
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多