web-dev-qa-db-fra.com

Docker derrière un proxy qui modifie le certificat SSL

J'essaie d'exécuter la commande docker suivante:

docker run -i -t ubuntu /bin/bash

Mais je reçois l'erreur:

Unable to find image 'ubuntu' (tag: latest) locally

Pulling repository ubuntu
2013/11/28 14:00:24 Get https://index.docker.io/v1/images/ubuntu/ancestry: x509: certificate signed by unknown authority

Je sais que notre entreprise remplace le certificat SSL à la volée pour les demandes https.

J'ai essayé de faire confiance au certificat CA de notre entreprise en le mettant dans:

 /etc/pki/tls/certs/ca-bundle.crt

et

/etc/pki/tls/cert.pem

Mais cela ne fonctionne toujours pas.

Des idées?

18
reen

Pour configurer docker pour qu'il fonctionne avec un système proxy, vous devez d'abord ajouter la variable d'environnement HTTPS_PROXY/HTTP_PROXY au fichier sysconfig du docker. Cependant, selon que vous utilisez init.d ou l'outil de services, vous devez ajouter l'instruction "export". Comme solution de contournement, vous pouvez simplement ajouter les deux variantes dans le fichier sysconfig de docker:

/etc/sysconfig/docker

HTTPS_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"

Pour que Docker travaille avec des proxy d'interception SSL, vous devez ajouter le certificat racine proxy au magasin de clés de confiance des systèmes.

Pour CentOS, copiez le fichier dans/etc/pki/ca-trust/source/anchors/et mettez à jour le ca trust store. Redémarrez ensuite le service Docker. Si votre proxy utilise l'authentification NTLM - il est nécessaire d'utiliser des proxy intermédiaires comme cntlm. Ce billet de blog l'explique en détail

7
Marcel Friedmann

La réponse de @ jpetazzo est globalement correcte, mais il existe une meilleure façon de faire la même chose (sans éditer manuellement un fichier CA-bundle):

  • sur CentOS:

    Sudo cp yourcert.crt /etc/pki/ca-trust/source/anchors/
    Sudo update-ca-trust extract
    Sudo service docker restart
    
  • sur Debian:

    Sudo cp yourcert.crt /usr/local/share/ca-certificates/
    Sudo update-ca-certificates
    Sudo service docker restart
    

Notez que le redémarrage du démon docker est nécessaire!

13
Sergey Evstifeev

Selon http://golang.org/src/pkg/crypto/x509/root_unix.go , vous devez ajouter votre certificat à l'un des éléments suivants:

  • /etc/ssl/certs/ca-certificates.crt
  • /etc/pki/tls/certs/ca-bundle.crt
  • /etc/ssl/ca-bundle.pem
  • /etc/ssl/cert.pem
  • /usr/local/share/certs/ca-root-nss.crt

Trouvez celui qui existe sur votre système et ajoutez-y votre certificat.

(Et soyez prêt à recommencer lorsque vous mettez à niveau le package contenant ce fichier ...)

J'espère qu'il y a une meilleure méthode, mais c'est la seule que j'ai trouvée jusqu'à présent :-)

13
jpetazzo