2015-05-14 13 views
1

我創建了NGINX前端的私人碼頭註冊表。 NGINX是ssl終止的地方。碼頭登錄失敗 - > x509:由未知權限簽名的證書..「crypto/rsa:verification error」

我使用my-domain.com來模糊我的域名以達到這個問題的目的。

我使用安裝了boot2docker的OSX 10.10.3。但應該注意的是,Vagrant + CoreOS + Docker的工作流程不應該涉及boot2docker,因爲我在虛擬機(CoreOS)而不是主機(OSX)中存在問題。

我使用Vagrant從這個box啓動本地CoreOS VM。然後我ssh到該虛擬機的實例,並嘗試發出以下命令

$ docker login docker.my-domain.com 

我再提示輸入自己的用戶名,密碼,電子郵件的預期;並提供我的細節。

注意:我能夠按預期在主機操作系統(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 

畢竟,我不確定接下來要做什麼。任何和所有的幫助表示讚賞!

回答

2

原來這是一個兩部分問題。第一個問題是,當我將證書文件(ca.crt)放入相對的/ etc/ssl/certs /文件夾時,我沒有用.pem擴展名重命名原始文件。這意味着當我運行update-ca-certificates在客戶端計算機上安裝自定義證書時,它不會被識別。這隱藏了第二個主要問題。

我沒有使用正確的證書文件。一旦我使用了正確的證書文件,並且我將該文件重命名爲具有.pem擴展名,我運行了update-ca-certificates,然後發出了登錄命令並且它工作正常。

我假設我已經在我的主機OSX機器上正確安裝了正確版本的證書,這就是爲什麼它在那裏工作但不在虛擬機中的原因。

0

這對其他用戶來說非常有用。如果您使用的是中間證書,則docker看到的ca.pem文件必須有同時包含根證書和中間證書。如果您使用的是客戶端證書,那麼您幾乎可以肯定希望在〜/ .docker/ca.pem文件中擁有完整的證書鏈。

相關問題