我在Ubuntu14.04上的Docker1.13.1容器中运行ASP.NET Core1.1WebAPI。
当代码尝试从HTTPS服务器检索一些数据时,我收到以下证书身份验证错误:
An error occurred while sending the request. ---> System.Net.Http.CurlException: Peer certificate cannot be authenticated with given CA certificates
at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)
at System.Net.Http.CurlHandler.MultiAgent.FinishRequest(StrongToWeakReference`1 easyWrapper, CURLcode messageResult)
HTTPS服务器是由我们的公司CA签署的内部证书,所以我知道我可能需要注册内部CA。
到目前为止,我所发现的关于这个错误的一切和Docker谈到让docker本身运行,连接到repos等。我的Docker工作得很好,Web API在容器外部的Ubuntu服务器上运行没有问题。
1)是否需要在docker镜像内添加CA根证书?
2)如果是,我该怎么做?
3)如果没有,我该如何修复?
发布于 2017-02-17 16:10:47
该任务本身并不特定于docker,因为您还需要在普通系统上添加该CA。关于如何做到这一点,askubuntu community上有一个答案。
因此,在Dockerfile中,您将执行以下操作(如果您使用根用户以外的用户运行容器,请不要忘记chmod ):
ADD your_ca_root.crt /usr/local/share/ca-certificates/foo.crt
RUN chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates
发布于 2019-07-03 18:50:10
同样值得注意的是,这肯定需要使用.crt扩展。我最初尝试使用一个不通过update-ca-certificates
链接的.pem证书文件(我认为它们是可互换的,所以其他人也可以)。
发布于 2020-02-12 19:40:41
为了简化/标准化所有容器构建,我们现在将证书托管在中央HTTPS服务器上,并将其构建到容器中,如下所示:
# Debian stretch based container
RUN curl -ks 'https://cert.host.server/ssl_certs/EnterpriseRootCA.crt' -o '/usr/local/share/ca-certificates/EnterpriseRootCA.crt'
RUN /usr/sbin/update-ca-certificates
基于高山的容器没有立即可用的工具,因此需要更多的工作才能实现相同的目标:
# Alpine based containers
RUN apk update && apk add curl
WORKDIR /usr/local/share/ca-certificates
RUN curl -ks 'https://cert.host.server/ssl_certs/EnterpriseRootCA.crt' -o '/usr/local/share/ca-certificates/EnterpriseRootCA.crt'
RUN /usr/sbin/update-ca-certificates
如果您还想更新Java信任库(与任何计算机上的一样):
RUN keytool -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file EnterpriseRootCA.crt
https://stackoverflow.com/questions/42292444
复制相似问题