ASP.NET Core HttpClient不能在容器中进行HTTPS调用

我正在将API从Windows .NET Full Framework(4.6.1)迁移到ASP.NET Core。

我可以通过下面的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打电话给一个HTTPSurl,呼叫失败。

InnerExceptionMessage读取:

SSL连接错误

有没有人看到这个,如果是的话,你知道是否有一些额外的configuration需要容器能够通过HTTPS进行HTTP操作吗? 它似乎与HTTP正常工作。

编辑:

我的应用程序不能通过HTTPS运行。 它通过HTTP托pipe。 我的应用程序中的代码试图调用通过HTTPS托pipe的远程API,并且拥有有效的证书。

linux上的.net核心使用curl来提供HttpClient的实现

你可以testing这是否适合你

 docker run microsoft/aspnetcore-build:2.0 curl https://server 

如果没有,请尝试一下,看看你是否有和我一样的问题:

 docker run microsoft/aspnetcore-build:2.0 curl -k https://server 

对于我来说,问题在于我连接到的站点的证书存储区中缺less部分证书链。

我修改了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"] 

它适用于我

我认为你必须公开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包含一个证书docker容器的ssl证书