docker登录失败 - > x509:由未知权限签名的证书..“crypto / rsa:验证错误”

问题描述 投票:2回答:2

我创建了一个私有的docker注册表,由NGINX提供。 NGINX是ssl终止的地方。

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

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

我正在使用Vagrant从这个box中启动本地CoreOS VM。然后我ssh到该VM的实例并尝试发出以下命令

$ docker login docker.my-domain.com

然后按预期提示我输入用户名,密码和电子邮件;我提供了我的详细信息。

注意:我能够按预期在Host OS(OSX)中发出上述命令并能够成功登录(生成〜/ .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

我得到了预期的'验证返回代码:0(确定)'。这让我相信它的码头似乎有问题。

$ 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

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

macos docker vagrant coreos
2个回答
3
投票

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

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

我假设我必须在我的主机OSX机器上正确安装了正确版本的证书,这就是为什么它在那里工作但不在VM中。


0
投票

这对于遇到此问题的其他人来说非常有用。如果您使用的是中间证书,则docker看到的ca.pem文件必须同时包含根证书和中间证书。如果您使用的是客户端证书,那么您几乎肯定也想要〜/ .docker / ca.pem文件中的完整证书链。

© www.soinside.com 2019 - 2024. All rights reserved.