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