windows - 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

我找到了几个解决这个问题的答案,但总是针对Linux环境。如何在Windows中解决此问题?


最佳答案:

这个普遍的问题困扰了我几个月。我第一次注意到它是在试图让本地虚拟机获取Python包时,所以我已经知道证书是一个问题。我为我的虚拟机解决了这个问题,但直到今天才为Docker解决了这个问题。诀窍是将证书添加到Docker的证书存储中,并使它们保持不变。这是通过使用每次机器启动时执行的bootlocal.sh脚本来完成的。
我想如果您已经找到了Linux的答案,那么您已经知道了第一步。我会把它们记录在这里,以便彻底了解,因为其他人可能还没有做到这一点。如果您已经通过之前的尝试完成了1和2,请从下面的3开始。
获取应该安装在企业配置浏览器中的企业根证书集。在chrome中,您可以转到“设置”,单击“显示高级设置”,然后向下滚动到https/ssl,从中可以选择“管理证书”。我的组织已将它们放在受信任的根证书颁发机构中,并以该组织的名称命名它们。一次导出一个(我有两个)。您可以选择der格式并执行下面的步骤2转换为PEM,也可以选择Base-64编码的X.509(.cer),只需将扩展名重命名为.pem并跳过步骤2。
将它们保存到已知位置后,您将希望将它们转换为PEM格式,除非另存为duch。我找到的最简单的方法是在Docker QuickStart终端内运行openssl.exe[1]命令。

openssl x509 -inform der -in certificate.cer -out certificate.pem

一旦你有了.pem文件,你就会想把它们复制到你的docker机器可以访问的地方。通常,对于MS Windows,主机的/c/用户将自动安装在Docker计算机中。我在c:\users\my.username\certs中创建了一个目录,并将其复制到那里。
这一步可能不是绝对必要的,但这是我所做的,而且是有效的。您将要将这些证书复制到持久的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/

现在是编写bootlocal.sh脚本的时候了,每次系统启动时,它都会将证书复制到正确的位置。【2】如果还没有,请按照步骤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 /var/lib/boot2docker/certs/*.pem /etc/docker/certs.d

通过使用机器内的reboot命令或使用docker终端的docker machine命令重新启动机器:
docker-machine restart default

现在你应该能够运行“你好世界”和其他。我希望这有帮助。
来源
[1]https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem
[2]https://github.com/boot2docker/boot2docker/issues/347#issuecomment-189112043