2017-08-30 62 views
1

我使用以下Dockerfile为我的ASP.NET核心应用创建一个容器:Asp.net核心泊坞容器出站HTTPS调用失败

FROM microsoft/aspnetcore:1.1.2 
ARG source 
WORKDIR /app 
EXPOSE 80 
COPY PublishOutput . 
ENTRYPOINT ["dotnet", "IdentityServer4.Management.dll"] 

看来,如果我的容器有作出任何呼出电话通过HTTPS,抛出一个异常,引用卷曲:

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: SSL connect error 

这似乎发生,即使远程端有一个有效证书。我已经能够通过附加绕过这个下面HttpHandlerto的HttpClient的,这似乎是绕过的问题:

var httpClientHandler = new HttpClientHandler(); 
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; 

缺少什么我在这里,和为什么我在做这个作为一种变通方法?

在试图研究这个问题时,我遇到了一些需要“客户端证书”来建立这个连接的讨论,没有具体的例子。

另外,我在技术上使用Rancher作为我们的Docker管理系统,它有一组运行这些容器的基础结构。不知道这是否有所作为,但我想我会提及它。

回答

0

正因为我在内部公司网络上运行此项服务,并且我的公司安全部门为内部应用程序颁发了证书,所以我必须将CA Chain证书添加到我的容器中,以便它将我的公司识别为有效权威。我将这些添加到我的Dockerfile中:

RUN curl -o /usr/share/ca-certificates/my_ca_chain.crt https://somelocation/my_ca_chain.crt 
RUN echo "my_ca_chain.crt" >> /etc/ca-certificates.conf && update-ca-certificates