2015-07-03 12 views
16

Ich verwende Docker unter Windows (boot2docker + Oracle Virtual Box). In meiner Unternehmensumgebung ändern sie die Zertifikate so, dass die CAs selbstsignierte CAs des Unternehmens sind. Somit endet die Kette wie folgt auf:Docker unter Windows (Boot2Docker) - Zertifikat von unbekannter Behörde signiert Fehler

Company's CA 
    |__ 
     Company's Intermediate CA 
      |__ 
       Docker Certificate 

Wenn ich versuche, jeden Befehl auszuführen, wie zum Beispiel:

docker run hello-world 

ich diesen Fehler:

Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority 

ich einige gefunden haben Antworten auf dieses Problem, aber immer für Linux-Umgebungen. Wie kann ich dieses Problem in Windows umgehen?

+0

Haben Sie es arbeiten Arbeiten? Habe gerade das selbe Problem – meilon

+0

Sorry, ich habe nicht ... immer noch nach einem Workaround gesucht – codependent

+0

Irgendwelches Glück dabei? –

Antwort

31

Dieses allgemeine Problem plagen mich seit ein paar Monaten. Ich habe es zuerst bemerkt, als ich versucht habe, eine lokale virtuelle Maschine zum Abrufen von Python-Paketen zu bekommen. Ich hatte also schon eine Idee, dass Zertifikate ein Problem darstellen würden. Ich habe es für meine VMs gelöst, war aber bis heute nicht in der Lage, eine Lösung für Docker auszuarbeiten. Der Trick besteht darin, die Zertifikate dem Docker-Zertifikatspeicher hinzuzufügen und sie persistent zu machen. Dies wird mithilfe eines bootlocal.sh-Skripts erreicht, das bei jedem Start des Computers ausgeführt wird.

Ich nehme an, wenn Sie bereits die Antworten für Linux gefunden haben, kennen Sie bereits die ersten Schritte. Ich werde sie hier dokumentieren, um gründlich zu sein, weil andere vielleicht nicht so weit gekommen sind. Fangen Sie mit # 3 an, wenn Sie bereits # 1 und # 2 durch vorherige Versuche gemacht haben.

  1. Holen Sie sich den Satz von Unternehmensstammzertifikaten, die in Ihrem vom Unternehmen konfigurierten Browser installiert werden sollen. In Chrome können Sie zu Einstellungen gehen, auf Erweiterte Einstellungen anzeigen und zu HTTPS/SSL herunterscrollen, wo Sie Zertifikate verwalten wählen können. Meine Organisation hat sie vertrauenswürdigen Root Cerftification Authorities zugewiesen und sie nach der Organisation benannt. Exportieren Sie jeden (ich habe zwei) nacheinander, und achten Sie darauf, das DER-Format zu wählen.

  2. Sobald Sie sie an einem bekannten Speicherort gespeichert haben, möchten Sie sie in PEM-Format konvertieren. Der einfachste Weg, dies zu tun, war, den Befehl openssl.exe [1] im Docker Quickstart Terminal auszuführen.

    openssl x509 -inform der -in certificate.cer -out certificate.pem 
    
  3. Sobald Sie die .pem-Dateien haben, werden Sie sie in einem Ordner kopieren, an dem Ihr Docker Maschine Zugriff hat. Ich habe ein Verzeichnis in c: \ Users \ my.username \ certs erstellt und dort kopiert.

  4. Dieser Schritt ist nicht unbedingt notwendig, aber es ist, was ich getan habe, und es funktioniert. Sie sollten diese Zertifikate in Ihre boot2docker-Partition kopieren, die persistent ist. Ich bin den Anschluss an meine Standard-Maschine, die ist etwas, müssen Sie für Schritt tun 5.

    MINGW64:$ docker-machine ssh default 
    
    [email protected]:~$ sudo -s 
    [email protected]:/home/docker# mkdir /var/lib/boot2docker/certs 
    [email protected]:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/ 
    
  5. Jetzt ist es Zeit, ein bootlocal.sh Skript zu schreiben, die die Zertifikate an die richtige Stelle jedes Mal kopiert Das System startet. [2] Falls noch nicht geschehen, öffnen Sie gemäß Schritt 4 eine SSH-Verbindung zum Computer.

    touch /var/lib/boot2docker/bootlocal.sh && chmod +x /var/lib/boot2docker/bootlocal.sh 
    vi /var/lib/boot2docker/bootlocal.sh 
    

    folgenden Text einfügen und speichern Sie die Datei:

    #!/bin/sh 
    
    mkdir -p /etc/docker/certs.d && cp certs/certificate.pem /etc/docker/certs.d 
    
  6. Restart die Maschine, entweder indem sie von innerhalb der Maschine den Neustart-Befehl oder durch den Befehl Docker-Maschine vom Docker Terminal :

    docker-machine restart default 
    

Jetzt sollten Sie in der Lage sein, ‚Hallo Welt‘ und andere zu laufen. Ich hoffe das hilft.


Quellen

[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem

[2] https://github.com/boot2docker/boot2docker/issues/347#issuecomment-189112043

+0

Funktioniert perfekt – Gajotres

0

Ein Weg, es mit Firefox zu tun, gehen Sie zu url: https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io, klicken Sie auf Details für das Zertifikat und extrahiere es als crt.

Kopieren Sie die Datei auf VM, wo die OS speichert die crt:

CentOS

etc/pki/ca-trust/source/anchors/ 
# Then run 
update-ca-trust force-enable 
update-ca-trust extract 

Ubuntu

/usr/share/ca-certificates 
#Then run 
sudo dpkg-reconfigure ca-certificates 

Reboot Docker, und es sollte