dockerlogin失败 – > x509:由未知权威签名的证书..“encryption/ rsa:validation错误”

我已经创build了NGINX前端的私人dockerregistry。 NGINX是ssl终止的地方。

为了这个问题,我使用my-domain.com来混淆我的域名。

我正在使用安装了boot2docker的OSX 10.10.3。 但应该注意的是,Vagrant + CoreOS + Docker的工作stream程不应该涉及到boot2docker,因为我在VM(CoreOS)而不是主机(OSX)中有问题。

我正在使用Vagrant从这个盒子里启动一个本地的CoreOS虚拟机。 然后我ssh进入该虚拟机的一个实例,并尝试发出以下命令

$ docker login docker.my-domain.com 

然后提示我input用户名,密码和电子邮件; 我提供我的细节。

注意:我能够按照预期的方式在主机操作系统(OSX)中发出上述命令,并且能够成功login(生成〜/ .dockercfg文件)。

我得到以下错误:

 FATA[0008] Error response from daemon: v1 ping attempt failed with error: Get https://docker.my-domain.com/v1/_ping: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "*.my-domain.com"). If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry docker.my-domain.com` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/docker.my-domain.com/ca.crt 

我从我的自签名复制了我的ca.crt。 我可以确认CoreOS能够通过SSL正确连接到我的服务器。 我运行这个命令

 openssl s_client -CAfile /etc/docker/certs.d/docker.my-domain.com/ca.crt -connect docker.my-domain.com:443 

我得到预期的'validation返回码:0(好)'。 这使我相信它的docker似乎有问题。

 $ docker version (from within CoreOS VM) Client version: 1.6.1-rc2 Client API version: 1.18 Go version (client): go1.4.2 Git commit (client): 17f157d-dirty OS/Arch (client): linux/amd64 Server version: 1.6.1-rc2 Server API version: 1.18 Go version (server): go1.4.2 Git commit (server): 17f157d-dirty OS/Arch (server): linux/amd64 

毕竟,我不确定接下来要做什么。 任何和所有的帮助表示赞赏!

这原来是两个部分的问题。 第一个问题是,当我将证书文件(ca.crt)放在相对的/ etc / ssl / certs /文件夹中时,我没有用.pem扩展名重命名原始文件。 这意味着当我运行update-ca-certificates来在客户端机器上安装我的自定义证书时,它没有被识别。 这隐藏了第二个主要问题。

我没有使用正确的证书文件。 一旦我使用了正确的证书文件,并将文件重命名为具有.pem扩展名,我运行了update-ca-certificates,然后发出login命令并运行。

我假设我已经在我的主机OSX机器上正确地安装了正确版本的cert,这就是为什么它在那里工作,而不是在VM中。

这对其他用户来说是非常有用的。如果你正在使用中间证书,docker看到的ca.pem文件必须同时拥有根证书和中间证书。 如果您正在使用客户端证书,那么您几乎可以肯定需要您的〜/ .docker / ca.pem文件中的完整证书链。