Machine: Méthode recommandée pour installer le certificat CA sur la machine docker VM locale

Créé le 3 sept. 2015  ·  34Commentaires  ·  Source: docker/machine

Généralement, le certificat CA racine de l'entreprise est installé par le service informatique sur les machines et les serveurs des développeurs (ils ne sont pas fournis avec le système d'exploitation). Lors de l'utilisation d'une machine docker avec des VM locales (virtualbox), devons-nous installer le certificat CA racine de l'entreprise sur la VM pour parler avec un registre docker hébergé sur le réseau de l'entreprise ?

Je me demande quelle est la méthode recommandée pour installer le certificat CA sur ma VM locale ? Cela semble être un début de réponse ici, mais rien de convaincant/correct.

Et s'il existe des CA d'entreprises intermédiaires, quelle est la voie recommandée ? Regrouper tous les certificats ?

areidentity

Commentaire le plus utile

Cela a demandé beaucoup de recherches et la solution est d'une simplicité embarrassante (mais pas évidente). Et il y a quelques choses à noter. La réponse était ici - mais vous devez lire la section du code jusqu'à l'approche alternative.

Fondamentalement, copiez les versions pem (encodées en Base64) de votre chaîne de confiance CA dans /var/lib/boot2docker/certs/ . Vous ne pouvez pas utiliser les bundles ca. Le script de démarrage boot2docker y récupérera automatiquement les fichiers pem et les ajoutera à la configuration ssl. De plus, il s'agit d'un répertoire spécial qui sera conservé lors des redémarrages.

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

Cela devrait être plus simple donc je soutiens (#1799). De plus, nous devrions pouvoir spécifier un répertoire rempli de fichiers pem, ce qui facilite l'ajout de plusieurs certificats (comme dans les chaînes de confiance complètes).

Tous les 34 commentaires

J'aimerais aussi savoir ça. J'ai suivi la procédure (https://docs.docker.com/articles/https/) pour créer une nouvelle autorité de certification et des certificats. J'ai essayé de mettre les fichiers /var/lib/boot2docker et /var/lib/boot2docker/tls mais j'ai des problèmes avec le script de démarrage /etc/init.d/docker écrasant le certificat que j'ai généré.

J'ai examiné cela un peu plus et il semble que docker-machine écrasera tout ce qui se trouve dans l'hôte .docker/machines/machine/default avec les certificats qu'il génère. Il remplace également les fichiers de boot2docker vm dans /var/lib/boot2docker. Il est possible de se connecter et de remplacer des fichiers dans la machine virtuelle et de mettre à jour /var/lib/boot2docker/profile mais cela est également remplacé au démarrage (je ne sais pas par quoi, mais peut-être par 'docker-machine env default').

@oobles, vous devriez pouvoir utiliser les options --tls-ca-cert , --tls-cert et --tls-key pour spécifier les certificats existants.

Lors de l'utilisation de docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vm , la commande échoue dans :

Error creating machine: error generating server cert: crypto/tls: private key does not match public key

Le point ici (et je suppose que dans la plupart des entreprises) est que je ne peux pas donner l'option --tls-ca-key car je ne gère pas l'autorité de certification de l'entreprise, donc je ne connais pas la clé privée.

Qu'est-ce que j'oublie ici ? Ces options ne sont-elles utiles que pour les personnes gérant leur propre CA, signant leurs propres certificats ?

Je veux juste que mon client docker (sur ma machine virtuelle) à docker login sur notre registre d'entreprise qui montre un certificat signé par l'entreprise CA.

De l'aide ?

Même problème ici des améliorations?

+1. Même problème dans notre organisation.

Ma façon de contourner la situation était la suivante :
Sur le serveur de registre :

  1. créez les certificats auto-signés comme indiqué dans la documentation du docker.
  2. créer un fichier .pem concaténant la clé et le fichier cert

Sur la machine Docker :

  1. copiez via scp le fichier pem sur votre [email protected] :/home/docker
  2. via ssh [email protected] (mot de passe : tcuser) déplacez le fichier pem vers : /var/lib/boot2docker/certs/
  3. Redémarrer la machine Docker

Mes conteneurs génèrent unable to find valid certification lors du téléchargement à partir d'une connexion https. Mon entreprise utilise un certificat racine intermédiaire ZScaler CA et utilise également un fichier PAC pour configurer automatiquement le proxy.

+1 à ce sujet. S'il était possible de réutiliser les certificats CA (cert et clé) et client (cert et clé) existants, il devrait vraiment être possible de réutiliser l'infrastructure TLS existante lors du déploiement de certificats sur le moteur docker avec docker-machine, par exemple

  • --tls-server-cert
  • --tls-server-key
docker-machine create -d ... \
  --tls-ca-cert cacert.pem \
  --tls-ca-key cacert.key \
  --tls-client-cert local_user.pem \
  --tls-client-key local_user.key \
  --tls-server-cert server.pem \
  --tls-server-key server.key

Error creating machine: Error running provisioning: error generating server cert: crypto/tls: failed to parse private key en jeu pour moi parce que cacert.key est protégé par mot de passe.

+1

👍 , car c'est un bloqueur majeur pour nous. Notre service informatique d'entreprise place un certificat HTTPS personnalisé sur toutes les demandes allant de l'intérieur de notre pare-feu d'entreprise à l'Internet public, nous ne pouvons donc même pas contacter Docker Hub pour les conteneurs sans pouvoir configurer ces certificats correctement.

Quelqu'un a-t-il déjà trouvé une solution à cela ? Notre service informatique d'entreprise effectue un MitM pour remplacer tous les certificats HTTPS.

Quand j'ai essayé...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default il renvoie l'erreur suivante

Error creating machine: Error running provisioning: error generating server cert: crypto/tls: private key does not match public key

J'ai fini par sauter le cert tls au moment de la création de la machine. Une fois la création
la machine:

fichier de certificat docker-machine scp par défaut : ca.crt
docker-machine ssh par défaut
sudo mv ~/ca.crt /etc/docker/certs.d/docker.io/ca.crt

Ensuite, cela devrait fonctionner. Vous devrez peut-être mkdir les sous-répertoires avant le mv
commander. Remplacez docker.io par un hôte de registre interne si nécessaire.

Le jeudi 11 août 2016, Andy Ruestow [email protected] a écrit :

Quelqu'un a-t-il déjà trouvé une solution à cela ? Notre entreprise informatique fait un MitM pour
remplacer tous les certificats HTTPS.

Quand j'ai essayé...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default
il renvoie l'erreur suivante

Erreur lors de la création de la machine : erreur lors de l'exécution du provisionnement : erreur de génération
cert du serveur : crypto/tls : la clé privée ne correspond pas à la clé publique

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/docker/machine/issues/1799#issuecomment-239175647 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM
.

+ 1 GE utilise Zscaler et la gestion des certificats MitM et Docker est inutilisable sur toutes nos machines de développement pour le moment.

+1, essayant de résoudre ce problème maintenant aussi.

+1, essayant également de résoudre ce problème dans un environnement d'entreprise

+1 également dans l'environnement d'entreprise, le proxy effectue le démantèlement des certificats MitM. Besoin d'un moyen d'installer des certificats.

Cela a demandé beaucoup de recherches et la solution est d'une simplicité embarrassante (mais pas évidente). Et il y a quelques choses à noter. La réponse était ici - mais vous devez lire la section du code jusqu'à l'approche alternative.

Fondamentalement, copiez les versions pem (encodées en Base64) de votre chaîne de confiance CA dans /var/lib/boot2docker/certs/ . Vous ne pouvez pas utiliser les bundles ca. Le script de démarrage boot2docker y récupérera automatiquement les fichiers pem et les ajoutera à la configuration ssl. De plus, il s'agit d'un répertoire spécial qui sera conservé lors des redémarrages.

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

Cela devrait être plus simple donc je soutiens (#1799). De plus, nous devrions pouvoir spécifier un répertoire rempli de fichiers pem, ce qui facilite l'ajout de plusieurs certificats (comme dans les chaînes de confiance complètes).

@rpomeroy merci beaucoup, je faisais tout de même mais je ne savais pas que le redémarrage de la machine virtuelle était nécessaire et à cause de cela, je

Tout correctif pour Docker pour Windows

@rpomeroy Merci, est-ce que l'importation de la racine ca de l'entreprise dans notre machine docker est suffisante pour rendre notre registre accessible ? Ou devons-nous aussi mettre des trucs dans /etc/docker/certs.d/hostname/

Comme mentionné précédemment dans le fil, la distribution Linux sous boot2docker est fondamentalement immuable, donc mettre des éléments dans /etc/docker/certs ne survivra pas. Seul le var/lib/boot2docker/certs est modifiable et persistant. Notez que toutes ces informations devront peut-être être revérifiées avec les nouvelles versions de boot2docker.

J'exécute Windows 7 + VirtualBox (v5.2.6) + Docker Toolbox (Boot2Docker version 18.02.-ce) et j'ai eu le même problème.
Par exemple, lorsque j'essaie d'exécuter un conteneur, j'obtiens l'erreur suivante :
docker lance ubuntu /bin/echo 'Bonjour tout le monde'
Impossible de trouver l'image " ubuntu:latest " localement
C:\Program Files\Docker Toolboxdocker.exe : réponse d'erreur du démon : obtenez https://registry-1.docker.io/v2/ : x509 : certificat signé par une autorité inconnue.
Voir « C:\Program Files\Docker Toolboxdocker.exe exécuter --help ».

La solution suivante a fonctionné pour moi:

  1. Connectez-vous à la VM Docker par défaut
  2. Téléchargez vos certificats racine d'entreprise
  3. Créez un nouveau répertoire :
    sudo mkdir /var/lib/boot2docker/certs
  4. Copiez les certificats racine de votre entreprise dans le dossier nouvellement créé :
    sudo cp Racine-Ca1.crt Racine-Ca2.crt /var/lib/boot2docker/certs
  5. Redémarrer la VM par défaut
    Maintenant, ça tire l'image :)

@kvvoronina je
J'essaie d'utiliser vos étapes. mais j'utilise une connexion directe (cela signifie que je ne peux fournir aucun certificat racine d'entreprise aux étapes 2 et 4). comment résoudre cela ? Merci

Bonjour,

merci fantôme c'est du travail et je peux tirer mon image maintenant.
Mais je ne peux pas créer d'image celle de cet exemple : https://docs.docker.com/get-started/part2/#build -the-app
j'obtiens cette erreur :
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt ---> Running in b700eb53b7b2 Collecting Flask (from -r requirements.txt (line 1)) Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAI LED] certificate verify failed (_ssl.c:726)'),)': /simple/flask/
Avez-vous un problème pour cela?

Ubel, j'ai le même problème, j'ai des images à extraire, mais je ne peux pas créer d'images à l'aide du docker pour commencer. Avez-vous pu surmonter le problème ?

@cmenjivar : Non, j'ai toujours le même problème...

@Ubel : j'ai trouvé une solution, dans votre Dockerfile, ajoutez simplement les 3 hôtes python hébergés, au lieu d'un seul...

RUN pip install --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org -r requirements.txt

@cmenjivar : merci pour votre aide. ça marche pour moi aussi.

Maintenant, je dois essayer les mêmes choses avec l'url du package nuget

Quelqu'un pourrait-il mettre à jour cela pour l'hôte Windows et le conteneur Windows ?

Pour ce que ça vaut, @rpomeroy a la bonne réponse...

Exécutez les commandes suivantes dans le "Docker Quickstart Terminal" si vous utilisez Windows, pour vous assurer que vous disposez de l'environnement approprié. Le "$" est l'invite, ne collez pas cette partie. Vous voudrez peut-être émettre un cd ~/Downloads pour accéder à votre dossier Téléchargements avant d'exécuter les commandes ci-dessous. Vous pouvez répéter les deux étapes intermédiaires (corp-ca.pem) pour chaque autorité de certification que vous devez ajouter (intermédiaire ou autre), donnez-leur simplement un nom différent. Vous pouvez également utiliser un caractère générique, par exemple : corp-*.pem si vous aviez corp-ca-root.pem, corp-ca-intermediate.pem et corp-issuing-ca.pem.

copié de @rpomeroy ci-dessus :

$ docker-machine ssh default 'sudo mkdir /var/lib/boot2docker/certs'
$ docker-machine scp corp-ca.pem default:
$ docker-machine ssh default 'sudo mv corp-ca.pem /var/lib/boot2docker/certs/'
$ docker-machine restart default 

Les personnes qui essaient d'utiliser --tls-cert, --tls-key et --tls-ca-cert utilisent des options incorrectes. Ceux-ci sont destinés à l'authentification entre le client docker et le serveur.

Le seul point que je voudrais faire est que les systèmes de fichiers dans /etc ne sont pas vraiment "immuables", ils sont en fait "éphémères" (tmpfs), ce qui signifie qu'ils disparaîtront à chaque redémarrage. Les informations dans /var/lib/boot2docker/certs seront repeuplées au bon endroit dans /etc/docker/certs...

Quoi qu'il en soit, ce serait bien si la docker-machine faisait automatiquement confiance à tous les certificats auxquels le système hôte fait confiance.

Pour ceux qui ont peut-être quitté cette solution en pensant que cela ne fonctionnerait que pour la configuration de boot2docker et non pour la configuration de Docker pour Windows (Hyper-V), cette ( solution de

La solution « @rpomeroy fonctionne à la fois boot2docker et Docker pour Windows.

J'ai téléchargé les certificats .cer de mon entreprise dans le répertoire /etc/pki/ca-trust/source/anchors de mon conteneur Docker et j'ai entré les commandes ci-dessous.

update-ca-trust activer
mise à jour-ca-trust

Après avoir effectué les étapes ci-dessus, je pourrais obtenir la sortie requise de curl

Juste en train de sonner..

Il semble que l'ajout de ces deux montages sur votre conteneur semble fonctionner avec la plupart des configurations :

    volumes:
      - /etc/ssl/certs:/etc/ssl/certs
      - /usr/share/ca-certificates:/usr/share/ca-certificates

Windows est une autre histoire. J'éviterais si possible d'utiliser un hôte Windows Docker.

Cette page vous a été utile?
0 / 5 - 0 notes