Pet*_*ter 21 ubuntu curl ssl-certificate docker
我在Ubuntu 14.04上的Docker 1.13.1容器中运行ASP.NET Core 1.1 Web API.
当代码尝试从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)
Run Code Online (Sandbox Code Playgroud)
HTTPS服务器是内部的,我们的公司CA签署了证书,因此我知道我可能需要注册内部CA.
到目前为止我发现的关于这个错误的所有内容和Docker谈到让docker本身运行,连接到repos等.我的Docker工作正常,Web API在容器外的Ubuntu服务器上运行没有问题.
1)我是否需要在docker镜像中添加CA根证书?
2)如果是这样,我该怎么办?
3)如果没有,我该如何解决这个问题?
ceb*_*ebe 34
任务本身并不特定于docker,因为您还需要在普通系统上添加该CA. askubuntu社区有一个关于如何做到这一点的答案.
所以在Dockerfile中你会做以下事情:
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
Run Code Online (Sandbox Code Playgroud)
Pet*_*ter 25
为了简化/标准化所有容器构建,我们现在将证书托管在中央 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
Run Code Online (Sandbox Code Playgroud)
基于 Alpine 的容器没有立即可用的工具,因此需要做更多的工作才能实现相同的目标:
# 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
Run Code Online (Sandbox Code Playgroud)
如果您还想更新您的 Java 信任库(与在任何计算机上相同):
RUN keytool -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file EnterpriseRootCA.crt
Run Code Online (Sandbox Code Playgroud)
ca-certificates
将定位cert_file_name.crt
文件安装在与 Dockerfile 相同的目录中。
# Install ca-certificates
# Please locate cert_file_name.crt file in the same directory as Dockerfile.
COPY cert_file_name.crt /usr/share/ca-certificates/
RUN echo cert_file_name.crt >> /etc/ca-certificates.conf
RUN update-ca-certificates
Run Code Online (Sandbox Code Playgroud)
这将更新 Dockerfile 中的证书。
小智 5
还值得注意的是,这确实需要使用.crt扩展名。最初,我使用.pem cert文件尝试了此操作(我认为它们是可互换的,因此其他文件也可以),该文件未通过链接update-ca-certificates
。
归档时间: |
|
查看次数: |
30787 次 |
最近记录: |