Ошибка входа в докер -> x509: сертификат, подписанный неизвестным органом. Crypto/rsa: ошибка проверки

Я создал частный реестр докеров, перед которым стоит NGINX. NGINX — это место, где заканчивается ssl.

Я запутываю свой домен, используя my-domain.com для целей этого вопроса.

Я использую OSX 10.10.3 с установленным boot2docker. Но следует отметить, что рабочий процесс Vagrant + CoreOS + Docker не должен включать boot2docker, поскольку у меня проблемы с виртуальной машиной (CoreOS), а не с хостом (OSX).

Я использую Vagrant для запуска локальной виртуальной машины CoreOS из этого коробка. Затем я подключаюсь к экземпляру этой виртуальной машины по 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

После всего этого я не уверен, что мне нужно попробовать дальше. Любая помощь приветствуется!


person Patelify    schedule 14.05.2015    source источник


Ответы (2)


Это оказалось проблемой из двух частей. Первая проблема заключалась в том, что когда я поместил файл сертификата (ca.crt) в относительную папку /etc/ssl/certs/, я не переименовал исходный файл с расширением .pem. Это означало, что когда я запускал update-ca-certificates для установки собственного сертификата на клиентский компьютер, он не распознавался. Это скрывало вторую и главную проблему.

Я использовал неправильный файл сертификата. Как только я использовал правильный файл сертификата и переименовал файл, чтобы иметь расширение .pem, я запустил update-ca-certificates, а затем ввел команду входа в систему, и это сработало.

Я предполагаю, что я правильно установил правильную версию сертификата на моем хост-компьютере с OSX, поэтому он работал там, но не на виртуальной машине.

person Patelify    schedule 17.05.2015

Это в основном полезно для других людей, сталкивающихся с этим. Если вы используете промежуточные сертификаты, файл ca.pem, который видит докер, ДОЛЖЕН иметь в себе как корневой, так и промежуточный сертификаты. Если вы используете клиентские сертификаты, вам почти наверняка нужна полная цепочка сертификатов в файле ~/.docker/ca.pem.

person zie    schedule 24.08.2016