web-dev-qa-db-fra.com

La connexion au registre Docker échoue avec "Certificat signé par une autorité inconnue"

J'exécute un registre de docker privé sur Ubuntu en utilisant S3 pour le stockage. J'ai des problèmes pour obtenir les commandes de connexion/de transfert/extraction de docker via SSL. J'utilise Nginx devant Gunicorn pour gérer le registre. Cela fonctionne sans aucun problème sur HTTP, mais après avoir basculé sur HTTPS pour un système de production, l'erreur suivante est générée à partir de la connexion au docker client.

Point de terminaison du registre non valide: x509: certificat signé par une autorité inconnue 

J'ai acheté un certificat PositiveSSL plutôt bon marché de Commodo à utiliser pour cela. Je me suis assuré que les autorités de certification racine et intermédiaire sont installées sur le système Ubuntu exécutant le registre. Ce qui suit est ma configuration nginx pour le serveur 

     # Site nginx par défaut pour exécuter le registre de docker 
 
 En amont de docker-registry {
 Serveur localhost: 5000; 
} 
 
 serveur {
 écoutez 443; 
 
 nom_serveur docker.ommited.net; 
 
 ssl on; 
 ssl_certificate/etc/ssl /docker-registry.crt;
 ssl_certificate_key /etc/ssl/docker-registry.key;[.____.unset-.____.] proxy_set_header Host $ http_Host; # requis pour le client docker 
 proxy_set_header X-Real-IP $ remote_addr; # transmet l'adresse IP du client réel 
 
 client_max_body_size 0; # désactiver toutes les limites pour éviter HTTP 413 pour les téléchargements d'images volumineuses 
 
 
 emplacement/{
 proxy_pass http: // localhost: 5000 /; 
 } 
}

J'essaie de comprendre comment amener docker à reconnaître correctement le certificat ou à ignorer l'avertissement du certificat. J'exécute la version v0.7.3 de Docker-Registry, le client que j'utilise est la version 1.1.2 de Docker, build d84a070. Par ailleurs, lors de la consultation du registre dans un navigateur, le certificat est correctement reconnu. toute aide me dirigeant dans la bonne direction serait grandement appréciée! 

16
isuschlue

Pour les certificats moins chers/moins connus, tels que COMODO ou StartSSL, vous devez ajouter la chaîne de certificats complète dans le fichier de certificat que vous utilisez avec nginx. De nombreux systèmes d'exploitation n'approuvent pas les autorités de certification intermédiaires, mais uniquement l'autorité de certification racine. Vous devez donc indiquer les étapes manquantes entre le certificat de votre hôte et l'autorité de certification racine approuvée par le système d'exploitation.

Dans le courrier électronique avec lequel vous avez reçu votre certificat, vous devriez également trouver des liens vers les autorités de certification intermédiaires et l'autorité de certification racine. Ouvrez le fichier docker-registry.crt, faites défiler vers le bas, ajoutez les autorités de certification intermédiaires et, enfin, le certificat de l'autorité de certification racine pour la chaîne PositiveSSL. Une fois que vous avez fait cela, redémarrez nginx. Vous devriez maintenant être prêt à partir.

13
sullivanmatt

Pour les hôtes RHEL, vous pouvez ajouter le certificat d'autorité de certification à la liste PKI CA sur l'hôte client:

cp docker-registry.crt /etc/pki/ca-trust/source/anchors/docker-registry.crt
update-ca-trust
systemctl restart docker

De https://www.happyassassin.net/2014/09/06/adding-your-freeipa-servers-ca-certificate-to-the-system-wide-trust-store-on-Fedora-and-rhel/

3
Mark Lamourine

Si vous êtes sur mac, ajoutez simplement le registre au paramètre insecure-registries dans ~/.docker/daemon.json:

{ "debug" : true, "experimental" : true, "registry-mirrors" : [], "insecure-registries" : ["registry.your.domain.de"] }

Si vous faites une erreur quelque part (j'ai oublié une virgule dans le code JSON), des problèmes peuvent survenir après le démarrage du démon docker. À savoir toute commande de menu fixe lançant un Error response from daemon: Bad response from Docker engine. Quelques redémarrages et réinitialisations plus tard qui se sont résolus.

0
David Nathan