docker - .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
代替localhost
in 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
似乎也没有什么区别。
老实说,我不确定此时它还能是什么(或者我的用例是否得到支持)。
解决方案
推荐阅读
- c# - 当视图模型上存在“标题”属性时,为什么 ASP.NET MVC 客户端验证失败?
- mqtt - 在节点红色仪表板和调试消息中显示正确值时出错
- javascript - 运行 JSX 预处理器并使用 ES6 语法
- react-native - undefined 不是对象(评估 'event.target.value.toLowerCase')
- ruby - 从打开的浏览器获取 URL
- excel - 如何在多个单元格中同时使用 SUM 和 VLOOKUP 公式?
- angular - 防止引导程序 4 将自动活动类添加到复选框按钮
- c# - 如何从字节数组播放视频,并且不允许用户获取原始文件?
- python - 在写入时使用 pandas 读取 csv 文件
- asp.net - 在 UserControl 中填充复选框列表需要很长时间