【问题标题】:Docker on Mac behind proxy that changes ssl certificateMac上的Docker在更改ssl证书的代理后面
【发布时间】:2015-02-16 15:02:06
【问题描述】:

我对以下问题的最终解决方法是说服我们的 IT 人员不要干预 dockerhub 注册表。唉,我无法让其他任何东西工作。

我最初尝试在运行 10.8.5 的 Mac 上运行 Docker 时遇到了问题。看来我公司的证书重写代理似乎妨碍了获取图像:

orflongpmacx8:docker pohl_longsine$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository hello-world
FATA[0001] Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "bcauth") 

(确实,当我登录到没有麻烦的代理的访客无线时,我可以跳过这一步。但是,我需要弄清楚如何通过代理进行这项工作,因为使用访客无线是作为长期解决方案是站不住脚的。)

从表面上看,我的问题与this question 中回答的问题非常相似。但是,该问题中接受的答案对我不起作用,因为他们讨论的 root_unix.go 文件不会在 Mac 上被调用。 (通过浏览,我猜想root_cgo_darwin.go 和/或root_darwin.go 会参与其中。)

这并没有真正告诉我,在操作上,我需要如何完成安装某种受信任证书的等效工作。我设法拿到了一个*.cer 文件,我认为该文件是我需要的,但我不知道如何处理它。

我希望有人能指出我正确的方向。

编辑:我想也许我需要类似于 this page suggests 的东西来添加证书。唉,我尝试遵循这些说明失败了:

orflongpmacx8:docker pohl_longsine$ sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "~/Desktop/Certs/redacted.cer" 
Password:
***Error reading file ~/Desktop/Certs/redacted.cer***
Error reading file ~/Desktop/Certs/redacted.cer

编辑 2:我可能离解决这个问题又近了一步。我应该知道更好地使用引号内带有波浪号的路径。如果我改用绝对路径,我可以成功运行上面的命令来添加证书。

唉,这并没有缓解最终的症状:

FATA[0001] Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "bcauth") 

【问题讨论】:

  • docker 守护进程实际上并没有在 mac 上运行,因为它是非常特定于 linux 的。我假设您正在使用 vagrant 启动 docker“主机”,然后通过套接字与之通信。我猜是boot2docker。 docker 守护进程本身可以忽略无效证书(我们也使用了 palo alto 代理)。您需要 ssh 到 docker 主机 vm 并编辑 /etc/default/docker 以告诉它忽略错误证书(忘记选项,以后有机会可以添加)
  • 这个:medium.com/@deeeet/… 可能会有所帮助。添加您的公司用于在代理中签署内容的根证书,一切都将变得有效
  • 是的,我正在使用“boot2docker up”,而 docker 守护进程实际上是在 VirtualBox 中的 linux VM 中运行的。您是否建议我真的应该尝试将证书添加到该 VM 中? (或将其配置为忽略您所说的不良证书)。我觉得我只是把现实世界误认为黑客帝国了。
  • 是的,我建议您在虚拟机 vm 中执行此操作。添加证书或禁用证书验证。您从 osx 运行的 docker 命令实际上除了 HTTP 命中在 linux 中运行的守护程序然后显示结果之外没有做任何事情。您得到的错误(很可能)来自 linux vm,与 osx config 无关
  • 在某处是否有 /etc/default/docker 的文件格式参考(我找不到)。该文件尚不存在,因此我必须创建它。当我停止/启动 VM 时,是否有某种方法可以使此类更改持续存在,或者我是否必须编写脚本 scp 将文件放置到位并重新启动 docker 守护进程?

标签: macos ssl go docker boot2docker


【解决方案1】:

根据boot2docker README

Insecure Registry

As of Docker version 1.3.1, if your registry doesn't support HTTPS, you must add it as an insecure registry.

$ boot2docker init
$ boot2docker up
$ boot2docker ssh
$ echo 'EXTRA_ARGS="--insecure-registry <YOUR INSECURE HOST>"' | sudo tee -a /var/lib/boot2docker/profile
$ sudo /etc/init.d/docker restart
then you should be able to do a docker push/pull.

【讨论】:

  • 公共 docker 注册表是否“不安全”?我认为它需要HTTPS。这感觉像是对另一个问题的回答。
  • 不确定不安全是指 http 还是表示无效证书。在您的情况下,由于代理自签名内容,您的证书“无效”。如果您有 CA 证书,您可以(在 boot2docker vm 中)将其添加到 /etc/ssl/cacerts.pem(首先查看格式以确保您的 .cer 是相同的纯文本)
  • 好点。假期结束后将不得不尝试他的实验。
  • 对于它的价值,我现在记得我让我们的 IT 人员没有拦截 dockerhub 作为我最终解决这个问题的方法。可能对您来说不可能,但如果是的话,那可以节省您的时间。我也将撤消它只是为了测试,因为现在我非常好奇。
  • 我们最终能够说服我们的 IT 人员不要使用 MitM dockerhub。
【解决方案2】:

http://golang.org/src/crypto/x509/root_darwin.go的来源显示命令:

cmd := exec.Command("/usr/bin/security", "find-certificate", "-a", "-p", "/System/Library/Keychains/SystemRootCertificates.keychain")

用于查找证书。

尝试将.cer 文件添加到 OSX 证书密钥链中。

【讨论】:

  • 感谢您的建议。我对我的问题添加了一些编辑,显示了我是如何设法按照您的建议进行的(我认为)。不过,它似乎并没有解决问题。
  • 尝试重启 docker 服务。您可能还想查看--insecure-registry docker 标志,但它相当hackish,顾名思义,不安全。更多信息docs.docker.com/reference/commandline/cli/#insecure-registries
【解决方案3】:

如果你使用 docker-machine

编辑 $USER/.docker/machine/machines/default/config.json

"EngineOptions": {
    "InsecureRegistry": [
        "XXX.XXX.virtual"
    ],
}

【讨论】:

    猜你喜欢
    • 2013-12-14
    • 2020-11-20
    • 2020-08-04
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2021-08-18
    相关资源
    最近更新 更多