首页 > 解决方案 > .NET Core Worker 服务(在 Docker 中运行)无法使用 HTTPS 连接到本地 REST API

问题描述

正如标题所述,我试图弄清楚如何让我的 .NET Core 工作人员服务部署在 Docker 容器内,以通过HTTPS与本地机器(Docker 主机)上的 REST API 进行通信。

注意:Docker 容器能够通过普通的 HTTP 与 REST API 进行通信,所以这似乎纯粹是 HTTPS/SSL 的问题。

作为背景,我通过 IIS 在我的本地计算机上部署了一个 ASP.NET Core REST API。我有一个用于 HTTP(端口 8001)的绑定和一个用于 HTTPS(端口 8101)的绑定。此外,所述 API 还与我的公司(模型)IdentityServer 实例交互。

此外,我有一个 .NET Core 工作者服务,它与上述 REST API 进行通信(使用HttpClient引擎盖下的)。我已将其打包到 Docker 映像/容器中(使用 Dockerfile 等)。

当我使用 HTTP(不是HTTPS)端点运行容器时,一切都很好,并且容器能够与本地机器上的 REST API 交互(前提是我使用host.docker.internal代替localhostin URL)。

但是,当我切换到 HTTPS 时,事情变得一团糟,我收到以下错误:

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.

我四处寻找解决方案,但似乎没有任何效果,但也许我做错了什么。

我已经尝试导出(通过 Windows 证书管理器)我可以提供的所有相关证书作为.cer文件,更改它们的扩展名.crt并通过 Dockerfile 将它们添加到 Docker 容器中:

COPY FooBar.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates
ENTRYPOINT ["dotnet", "My.Project.dll"]

(省略了无关的构建/发布步骤,因为我知道那些工作正常,但这个片段是更大的多阶段 Dockerfile 的一部分)。

注意: update-ca-certificates确实承认证书,所以我觉得它们是被添加的。我认为可能存在问题,因为我使用的是多阶段 Docker 构建,但即使在之前添加证书ENTRYPOINT似乎也没有什么区别。

老实说,我不确定此时它还能是什么(或者我的用例是否得到支持)。

标签: dockerssl.net-core

解决方案


推荐阅读