Windows上的Docker(Boot2Docker) – 由未知权限错误签名的证书

我在Windows上运行Docker(boot2docker + Oracle Virtual Box)。 在我的企业环境中,他们修改证书,使CA成为公司自己签署的CA. 因此,链条就这样结束了:

Company's CA |__ Company's Intermediate CA |__ Docker Certificate 

当我尝试运行任何命令时,例如:

 docker run hello-world 

我得到这个错误:

 Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority 

我已经find了这个问题的几个答案,但总是在Linux环境下。 我怎样才能解决这个问题在Windows中?

Solutions Collecting From Web of "Windows上的Docker(Boot2Docker) – 由未知权限错误签名的证书"

这个普遍问题困扰了我几个月。 当我试图让本地虚拟机获取Python包时,我首先注意到了这一点,所以我已经有了一个想法,认证是一个问题。 我为我的虚拟机解决了这个问题,但直到今天才能为Docker制定一个解决方案。 诀窍是将证书添加到Docker的证书存储,并保持它们。 这是通过使用每当机器启动时执行的bootlocal.sh脚本来完成的。

我假设你已经找到了Linux的答案,你已经知道了第一步。 为了彻底,我会在这里记录下来,因为其他人可能没有得到这么多。 如果您已经通过之前的尝试完成了#1和#2,请从下面的#3开始。

  1. 获取应该安装在企业配置的浏览器中的一组企业根证书。 在Chrome中,您可以转到设置,点击显示高级设置,然后向下滚动到HTTPS / SSL,您可以在其中选择管理证书。 我的组织已经把它们放在可信根证书颁发机构中,并在组织之后命名。 导出每个(我有两个),一次一个,确保选择DER格式。

  2. 一旦你把他们保存到一个已知的位置,你会想把它们转换成PEM格式。 我发现最简单的方法是在Docker Quickstart Terminal中运行openssl.exe [1]命令。

     openssl x509 -inform der -in certificate.cer -out certificate.pem 
  3. 一旦你有了.pem文件,你就需要将它们复制到你的Docker机器可以访问的位置。 我在c:\ Users \ my.username \ certs中创建了一个目录,并将其复制到那里。

  4. 这一步可能不是绝对必要的,但这是我所做的,它的工作原理。 您将需要将这些证书复制到持久存储的boot2docker分区中。 我正在连接到我的默认机器,这是您需要为第5步做的事情。

     MINGW64:$ docker-machine ssh default docker@default:~$ sudo -s root@default:/home/docker# mkdir /var/lib/boot2docker/certs root@default:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/ 
  5. 现在是编写一个bootlocal.sh脚本的时候了,它将在每次系统启动时将证书复制到正确的位置。 如果还没有,请按照步骤4打开与本机的SSH连接。

     touch /var/lib/boot2docker/bootlocal.sh && chmod +x /var/lib/boot2docker/bootlocal.sh vi /var/lib/boot2docker/bootlocal.sh 

    插入以下内容并保存该文件:

     #!/bin/sh mkdir -p /etc/docker/certs.d && cp certs/certificate.pem /etc/docker/certs.d 
  6. 通过使用机器内的重新启动命令或使用Docker终端中的docker-machine命令重新启动计算机:

     docker-machine restart default 

现在你应该可以运行'hello-world'等。 我希望这有帮助。


来源

[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem

[2] https://github.com/boot2docker/boot2docker/issues/347#issuecomment-189112043

一种方法做到这一点与Firefox,去url: https : //auth.docker.io/token? scope = repository%3Alibrary%2Fhello-world%3Apull & service =registry.docker.io ,点击查看详细信息的证书和提取它作为crt。

将文件复制到os存储crt的VM:

CentOS的

 etc/pki/ca-trust/source/anchors/ # Then run update-ca-trust force-enable update-ca-trust extract 

Ubuntu的

 /usr/share/ca-certificates #Then run sudo dpkg-reconfigure ca-certificates 

重新启动泊坞窗,它应该工作