Ошибка входа в докер -> 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

Я скопировал мой файл с моего подписания. Я могу подтвердить, что CoreOS может правильно подключиться к моему серверу по протоколу SSL. Я запускал эту команду

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

И я получаю ожидаемый "Verify return code: 0 (ok)". Это заставляет меня поверить, что у его докера, похоже, есть проблема.

$ 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, а затем выдал команду login, и это сработало.

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

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

Другие вопросы по тегам