繁体   English   中英

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

[英]Docker on Windows (Boot2Docker) - certificate signed by unknown authority error

我在 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 开始。

  1. 获取一组企业根证书,它应该安装在您的企业配置的浏览器中。 在 Chrome 中,您可以转到设置,单击显示高级设置,然后向下滚动到 HTTPS/SSL,您可以在其中选择管理证书。 我的组织已将它们放在受信任的根证书颁发机构中,并以组织的名字命名它们。 一次导出一个(我有两个)。 您可以选择DER 格式并执行下面的步骤 #2 以转换为PEM ,或者您可以选择Base-64 编码的 x.509 (.CER)并将扩展名重命名为.pem并跳过步骤 #2。

  2. 将它们保存到已知位置后,除非您另存为 duch,否则您将希望将它们转换为 PEM 格式。 我发现最简单的方法是从 Docker 快速入门终端中运行 openssl.exe[1] 命令。

     openssl x509 -inform der -in certificate.cer -out certificate.pem
  3. 获得 .pem 文件后,您需要将它们复制到 Docker 机器可以访问的位置。 通常对于 MS Windows,您将在您的 docker 机器内自动安装主机的 /c/Users。 我在 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 脚本了,它会在每次系统启动时将证书复制到正确的位置。 [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
  6. 重新启动机器,可以在机器内使用 reboot 命令,也可以从 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。

将文件复制到操作系统存储 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

重新启动 docker,它应该可以工作

对于导出证书,您可以选择文件格式为“ Base-64 编码的 x.509(.CER) ”,最后将证书扩展名重命名为.pem

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM