Ошибка входа в систему Docker с "Сертификатом, подписанным неизвестным органом"
Я использую приватный реестр docker на ubuntu, используя S3 для хранения. У меня возникли проблемы с подключением команд регистрации /push/pull докеров для работы через SSL. Я использую Nginx перед Gunicorn для запуска реестра. Он работает без каких-либо проблем по протоколу HTTP, но после перехода на HTTPS для системы prod он выдает следующую ошибку из входа в docker клиента.
Invalid Registry endpoint: x509: certificate signed by unknown authority
Я купил довольно дешевый сертификат PositiveSSL от Commodo, чтобы использовать для этого. Я обеспечил, чтобы корневой ЦС и промежуточный ЦС были установлены в системе Ubuntu с реестром. Ниже приведена конфигурация nginx для сервера
# Default nginx site to run the docker registry
upstream docker-registry {
server localhost:5000;
}
server {
listen 443;
server_name docker.ommited.net;
ssl on;
ssl_certificate /etc/ssl/docker-registry.crt;
ssl_certificate_key /etc/ssl/docker-registry.key;
proxy_set_header Host $http_host; # required for docker client sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads
location / {
proxy_pass http://localhost:5000/;
}
}
Я пытаюсь выяснить, как заставить докер правильно распознать сертификат или игнорировать предупреждение о сертификате. Я запускаю версию docker-registry v0.7.3, конкретным клиентом, который я использую, является версия Docker 1.1.2, build d84a070. на боковой ноте, при посещении реестра в браузере сертификат надлежащим образом распознается. любая помощь, указывающая на меня в правильном направлении, будет очень признательна!
Ответы
Ответ 1
Для дешевых/менее известных сертификатов, таких как COMODO или StartSSL, вам необходимо добавить целую цепочку сертификатов в файл сертификата, который вы используете с nginx. Многие операционные системы не доверяют промежуточным ЦС, а именно корневому ЦС, поэтому вам нужно заполнить недостающие шаги между сертификатом для вашего хоста и корневым ЦС, которому доверяет ОС.
В электронном письме, с которым вы получили сертификат, вы также должны найти ссылки на промежуточные центры сертификации и корневой центр сертификации. Откройте файл docker-registry.crt
, прокрутите страницу вниз и добавьте промежуточные ЦС и, наконец, корневой сертификат ЦС для цепочки PositiveSSL. После того, как вы это сделали, перезапустите nginx. Теперь вам должно быть хорошо.
Ответ 2
Для хостов RHEL вы можете добавить сертификат CA в список CA PKI на хосте клиента:
cp docker-registry.crt /etc/pki/ca-trust/source/anchors/docker-registry.crt
update-ca-trust
systemctl restart docker
Из https://www.happyassassin.net/2014/09/06/adding-your-freeipa-servers-ca-certificate-to-the-system-wide-trust-store-on-fedora-and-rhel/
Ответ 3
Если вы работаете на Mac, просто добавьте реестр в параметр insecure-registries
в ~/.docker/daemon.json
:
{
"debug" : true,
"experimental" : true,
"registry-mirrors" : [],
"insecure-registries" : ["registry.your.domain.de"]
}
Если вы где-нибудь допустили ошибку (я забыл запятую в JSON), могут возникнуть некоторые проблемы с запуском демона docker. А именно, любая команда docker, Error response from daemon: Bad response from Docker engine
об Error response from daemon: Bad response from Docker engine
. Несколько перезагружается и сбрасывается позже, что решает сам.
Ответ 4
Если вы используете letsencrypt и Nginx, просто изменить ssl_certificate
ключ от cert.pem
к fullchain.pem
.