无法使用 Docker 上 Web Api 核心应用程序的自签名证书连接到远程端点

Can't connect to remote endpoint using self-signed cert from Web Api core app on Docker

当我尝试从我的 docker 化网络 api 核心应用程序连接到远程端点时,出现以下错误:System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

当 运行 在 Docker 之外使用相同的应用程序时,它会按预期工作。我认为问题在于我们的组织使用自签名证书。完整的链已加载到我的本地计算机上,但我无法在 Docker 上安装它,因此网络 api 应用程序可以识别它。

在我的 Docker 文件中加载证书后(请参阅下面的详细信息),我能够使用 openssl 连接到远程站点并从我的 Docker 文件成功卷曲:

RUN openssl s_client -connect REMOTE.ENDPOINT:443 -servername REMOTE.ENDPOINT -verify_hostname REMOTE.ENDPOINT
...snip...
Verification: OK
...snip...
RUN curl --verbose https://REMOTE.ENDPOINT
...snip...
SSL certificate verify ok.

请注意,这些 openssl 和 curl 调用是我的 Docker 文件中的最后内容,因此我希望为我的应用设置所有内容以查看和使用证书。

以下是我将自签名证书添加到 Docker 文件

中的 docker 图像的方法
ADD localEc.crt /usr/local/share/ca-certificates/localEc.crt
RUN chmod 644 /usr/local/share/ca-certificates/localEc.crt && update-ca-certificates

应用程序运行时,我已验证我的证书不在 /etc/ssl/certs/ca-certificates.crt 中并且我的证书文件不在 /etc/ssl/certs 中。虽然我觉得没必要,但我试过直接将证书复制到镜像中:

COPY --from=build /etc/ssl/certs/ /etc/ssl/certs/
COPY ["/etc/ssl/certs", "/etc/ssl/certs"]

我错过了什么?

我知道我可以覆盖 ssl 验证过程以允许此证书,但我宁愿解决根本问题(并避免所有由解决方法 <g> 引起的讨论)。

我终于明白了。我不完全理解分阶段 docker 构建过程是如何工作的。似乎在调试时,Visual Studio 只使用了 docker 文件的第一阶段,而我在最后阶段添加了证书。 This article 阐明了 Docker 构建过程。