【问题标题】:SSL - Install trusted root certificate to aspnetcore docker containerSSL - 将受信任的根证书安装到 aspnetcore docker 容器
【发布时间】:2019-02-23 06:37:06
【问题描述】:

我正在尝试在 microsoft/aspnetcore docker 映像上安装受信任的自签名根证书。

我在这里关注了以下主题,

Trusted Root Certificates in DotNet Core on Linux (RHEL 7.1)

Install certificate in dotnet core docker container

它对我不起作用。这是 docker build 的输出,

步骤 10/24:复制 corppvt_root_cert.cer /usr/local/share/ca-certificates/corppvt_root_cert.cer ---> af1674a5219c

步骤 11/24:复制 CCASRootCert.cer /usr/local/share/ca-certificates/CCASRootCert.cer ---> a2d6affc1ae1

步骤 12/24 : RUN update-ca-certificates ---> 在 ca6fb1b9aa50 中运行 更新 /etc/ssl/certs... 中的证书 0 添加,0 删除;完毕。 在 /etc/ca-certificates/update.d... 中运行挂钩已完成。移除 中间容器 ca6fb1b9aa50

从 RUN update-ca-certificates 命令的输出来看,它似乎无法识别/存储新复制的证书,因为输出显示 0 已添加,0 已删除。

我正在使用 microsoft/aspnetcore 图像。我相信基于 Ubuntu/Debian 的图像。所以证书位置应该是 /usr/local/share/ca-certificates/

有人可以建议这个命令有什么问题以及为什么证书存储没有更新吗?有没有人用过这个图片并且做过这个 ssl 的东西?

提前致谢!

【问题讨论】:

    标签: docker ssl asp.net-core ssl-certificate containers


    【解决方案1】:

    您的证书没有得到安装/更新,因为 update-ca-certificates 只会选择 .crt,而不是 .cer。

    只需重命名扩展并重试。

    【讨论】:

      【解决方案2】:

      您不应该首先将证书放入您的容器中。在 docker 容器中使用 ASP.NET Core 时,典型的用例是将其配置为具有反向代理(例如 nginx、IIS 等)作为 ifs(面向互联网的服务器),它接受来自外部的请求并充当 SSL 终止端点以及负载均衡器。

      从反向代理到您的应用程序容器的流量未加密(仅在您自己的网络内,而不是通过公共网络)。这在性能方面具有优势(负载均衡器将进行 ssl 加密)和更少的维护(如果您更改证书,则在反向代理上进行,它适用于后面的所有应用程序)。

      反向代理应该发送X-Forwarded-* 标头,告诉后面的应用程序该请求是否使用 SSL 连接(X-Forwarded-Proto 标头),它是为谁转发的(X-Forarded-For,请求者 IP - 可能是另一个反向代理或最终用户 ip) 等。

      ASP.NET Core 将识别此标头,并且不会将其视为 HTTPS 请求(即使从反向代理到您的应用程序的连接未加密)。

      【讨论】:

      • 介意投反对票的人解释他的反对票吗?对于 docker 容器,这是并且始终是首选设置,当您需要更改证书时痛苦更少(否则,如果证书是容器的一部分,这意味着您必须更新每个容器,而不仅仅是负载均衡器/反向代理)
      • 我猜它被否决了,因为它根本没有回答这个问题。声明是不应该这样做,而是应该使用网关。当然这是个好主意,但是如果网关也是 asp 下的 docker 容器呢?净核心(豹猫)?在这种情况下,这个问题确实很有意义。还有其他有价值的场景,即使使用网关,您也需要在内部使用 https。
      • 投反对票,因为 Docker 中 ASP.Net Core 的用例不能概括为通过反向代理接收流量。在连接到各种资源(例如数据库、第三方 API、LDAP 服务器等等)时,有很多用例需要 TLS 会话。所有这些都需要安装 CA 证书,可能尚未包含在 OpenSSL 标准 CA Bundle 中。
      • 有很多数据库使用自签名证书,您需要一个受信任的根 CA 证书才能让应用程序连接到这些数据库。与rev代理等无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多