改变ssl证书的代理后面的Docker

时间:2013-11-28 13:21:21

标签: linux ssl rhel docker

我正在尝试运行以下docker命令:

docker run -i -t ubuntu /bin/bash

但我收到错误:

Unable to find image 'ubuntu' (tag: latest) locally

Pulling repository ubuntu
2013/11/28 14:00:24 Get https://index.docker.io/v1/images/ubuntu/ancestry: x509: certificate signed by unknown authority

我知道我们的公司会动态替换https请求的SSL证书。

我试图通过将其放入:

来信任我们公司的CA证书
 /etc/pki/tls/certs/ca-bundle.crt

/etc/pki/tls/cert.pem

但它仍无效。

有什么想法吗?

3 个答案:

答案 0 :(得分:13)

根据http://golang.org/src/pkg/crypto/x509/root_unix.go,您应将证书附加到以下某个位置:

  • /etc/ssl/certs/ca-certificates.crt
  • /etc/pki/tls/certs/ca-bundle.crt
  • /etc/ssl/ca-bundle.pem
  • /etc/ssl/cert.pem
  • /usr/local/share/certs/ca-root-nss.crt

找到系统中存在的那个,并将证书附加到其中。

(并且在升级包含该文件的包时,请准备好再次执行此操作...)

我希望有更好的方法,但这是我迄今为止唯一找到的方法: - )

答案 1 :(得分:13)

@ jpetazzo的回答是完全正确的,但有一种更好的方法可以做同样的事情(没有手动编辑ca-bundle文件):

    在CentOS上
  • sudo cp yourcert.crt /etc/pki/ca-trust/source/anchors/
    sudo update-ca-trust extract
    sudo service docker restart
    
  • Debian上的
  • sudo cp yourcert.crt /usr/local/share/ca-certificates/
    sudo update-ca-certificates
    sudo service docker restart
    

请注意,重启docker守护程序是必要的!

答案 2 :(得分:7)

要将docker配置为使用代理系统,首先需要将HTTPS_PROXY / HTTP_PROXY环境变量添加到docker sysconfig文件中。但是,根据您是否使用init.d或服务工具,您需要添加" export"声明。作为一种解决方法,您只需在docker的sysconfig文件中添加两个变体:

/etc/sysconfig/docker

HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"

要让docker使用ssl拦截代理,您必须将代理根证书添加到系统信任库。

对于CentOS,将文件复制到/ etc / pki / ca-trust / source / anchors /并更新ca信任存储。之后重新启动docker服务。 如果您的代理使用NTLM身份验证 - 使用cntlm等中间代理是必要的。 This blog post explains it in detail