ASP.NET Core HttpClient无法在容器中进行HTTPS调用

时间:2017-07-14 18:43:36

标签: c# docker asp.net-core

我正在将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网址,调用失败。

Message中的InnerException读取:

  

SSL连接错误

有没有人见过这个,如果有的话,你知道容器是否需要一些额外的配置才能通过HTTPS进行HTTP操作?它似乎可以正常使用HTTP。

修改

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

2 个答案:

答案 0 :(得分:1)

我认为您必须公开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 container ssl certificates

答案 1 :(得分:1)

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

你可以测试一下这对你有用吗<​​/ p>

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"]

它对我有用