首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在docker映像中添加CA根证书?

如何在docker映像中添加CA根证书?
EN

Stack Overflow用户
提问于 2017-02-17 16:00:18
回答 4查看 134.8K关注 0票数 73

我在Ubuntu14.04上的Docker1.13.1容器中运行ASP.NET Core1.1WebAPI。

当代码尝试从HTTPS服务器检索一些数据时,我收到以下证书身份验证错误:

代码语言:javascript
复制
 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)如果没有,我该如何修复?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-17 16:10:47

该任务本身并不特定于docker,因为您还需要在普通系统上添加该CA。关于如何做到这一点,askubuntu community上有一个答案。

因此,在Dockerfile中,您将执行以下操作(如果您使用根用户以外的用户运行容器,请不要忘记chmod ):

代码语言:javascript
复制
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
票数 107
EN

Stack Overflow用户

发布于 2019-07-03 18:50:10

同样值得注意的是,这肯定需要使用.crt扩展。我最初尝试使用一个不通过update-ca-certificates链接的.pem证书文件(我认为它们是可互换的,所以其他人也可以)。

票数 26
EN

Stack Overflow用户

发布于 2020-02-12 19:40:41

为了简化/标准化所有容器构建,我们现在将证书托管在中央HTTPS服务器上,并将其构建到容器中,如下所示:

代码语言:javascript
复制
# 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

基于高山的容器没有立即可用的工具,因此需要更多的工作才能实现相同的目标:

代码语言:javascript
复制
# 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信任库(与任何计算机上的一样):

代码语言:javascript
复制
RUN keytool -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file EnterpriseRootCA.crt
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42292444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档