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
打电话给一个HTTPS
url,呼叫失败。
InnerException
的Message
读取:
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证书