C# ASP.NET核心HttpClient可以';不要在容器中进行HTTPS调用

C# ASP.NET核心HttpClient可以';不要在容器中进行HTTPS调用,c#,docker,asp.net-core,C#,Docker,Asp.net Core,我正在将API从Windows.NET完整框架(4.6.1)迁移到ASP.NET核心 我能够通过以下Dockerfile在我们的Rancher环境中旋转一个容器: root@a84db3bdc3cf:/app# cat Dockerfile FROM microsoft/aspnetcore:1.1 ARG source=. WORKDIR /app EXPOSE 80 COPY $source . ENTRYPOINT ["dotnet", "myapp.dll"] 我注意到,在我的代码中,

我正在将API从Windows.NET完整框架(4.6.1)迁移到ASP.NET核心

我能够通过以下Dockerfile在我们的Rancher环境中旋转一个容器:

root@a84db3bdc3cf:/app# cat Dockerfile
FROM microsoft/aspnetcore:1.1
ARG source=.
WORKDIR /app
EXPOSE 80
COPY $source .
ENTRYPOINT ["dotnet", "myapp.dll"]
我注意到,在我的代码中,任何使用
HttpClient
调用
HTTPS
url的人,调用都会失败

InnerException
中的
消息
内容如下:

SSL连接错误

是否有人看到了这一点,如果是,您知道容器是否需要一些额外的配置才能通过HTTPS执行HTTP操作?它似乎可以与HTTP配合使用

编辑:


我的应用程序没有通过HTTPS运行。它是通过HTTP托管的。我的应用程序中的代码正在尝试调用通过HTTPS托管的远程API,该API具有有效的证书。

我认为您必须公开
443
,而不是
80
,因为443是
HTTPS
的默认端口

root@a84db3bdc3cf:/app# cat Dockerfile
FROM microsoft/aspnetcore:1.1
ARG source=.
WORKDIR /app
EXPOSE 443
COPY $source .
ENTRYPOINT ["dotnet", "myapp.dll"]
但是请注意,您应该确保docker包含一个证书

linux上的net core使用curl提供HttpClient的实现

你可以测试一下这样对你是否有效

docker run  microsoft/aspnetcore-build:2.0 curl https://server
如果没有,试试这个,看看你是否有和我一样的问题:

docker run  microsoft/aspnetcore-build:2.0 curl -k https://server
对我来说,问题是我连接到的站点的证书存储缺少部分证书链

我对Dockerfile进行了如下修改:

# build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .

COPY missing-cert.crt /usr/share/ca-certificates
RUN echo missing-cert.crt >> /etc/ca-certificates.conf
RUN update-ca-certificates

ENTRYPOINT ["dotnet", "myaspdotnetapp.dll"]

这对我很有用

我想在这里澄清一下。我的应用程序没有通过HTTPS运行。但是,我的应用程序的代码对通过HTTPS托管的另一个站点进行了API调用。您是否检查了要调用的API是否支持HTTPS是否与未安装
ca证书的docker映像相关?也许会有帮助。