it-swarm.com.de

Docker unter Windows (Boot2Docker) - Zertifikat, das von einem unbekannten Autoritätsfehler signiert wurde

Ich verwende Docker unter Windows (boot2docker + Oracle Virtual Box). In meiner Unternehmensumgebung ändern sie die Zertifikate so, dass die Zertifizierungsstellen die selbst signierten Zertifizierungsstellen des Unternehmens sind. So endet die Kette wie folgt:

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

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

docker run hello-world

Ich erhalte diesen Fehler:

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

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

28
codependent

Diese allgemeine Frage plagt mich seit einigen Monaten. Ich bemerkte es zuerst, als ich versuchte, eine lokale virtuelle Maschine zum Abrufen von Python-Paketen zu verwenden, daher hatte ich bereits die Idee, dass Zertifikate ein Problem wären. Ich habe es für meine VMs gelöst, konnte aber bis heute keine Lösung für Docker finden. Der Trick besteht darin, die Zertifikate dem Cert-Store von Docker hinzuzufügen und dauerhaft zu speichern. Dies wird durch Verwendung 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. Beginnen Sie mit Nr. 3 unten, wenn Sie Nr. 1 und Nr. 2 bereits in früheren Versuchen ausgeführt haben.

  1. Rufen Sie die Gruppe der Stammzertifikate des Unternehmens ab, die in Ihrem vom Unternehmen konfigurierten Browser installiert werden sollten. In Chrome können Sie zu Einstellungen wechseln, auf Erweiterte Einstellungen anzeigen klicken und zu HTTPS/SSL scrollen, wo Sie die Option Zertifikate verwalten auswählen können. Meine Organisation hat sie in vertrauenswürdige Stammzertifizierungsstellen aufgenommen und nach der Organisation benannt. Exportiere jeweils (ich habe zwei), eine nach der anderen. Sie können entweder DER-Format wählen und Schritt 2 unten ausführen, um in PEM zu konvertieren, oder Sie wählen Base-64-codiert x.509 (.CER) und benennen das Erweiterung zu .pem und überspringen Sie Schritt 2.

  2. Nachdem Sie sie an einem bekannten Ort gespeichert haben, möchten Sie sie in das PEM-Format konvertieren, sofern Sie nicht als "Duch" speichern. Am einfachsten fand ich dies, indem Sie den Befehl openssl.exe [1] vom Docker Quickstart-Terminal aus ausführen. 

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  3. Sobald Sie die .pem-Dateien haben, möchten Sie sie an einen Ort kopieren, auf den Ihre Docker-Maschine zugreifen kann. Normalerweise haben Sie/c/Benutzer des Host-Computers automatisch in Ihrem Docker-Computer installiert. Ich habe ein Verzeichnis in c:\Users\mein.Benutzername\certs erstellt und dort kopiert.

  4. Dieser Schritt ist zwar nicht unbedingt notwendig, aber ich habe es getan und es funktioniert. Sie müssen diese Zertifikate in Ihre boot2docker-Partition kopieren, die dauerhaft ist. Ich verbinde mich mit meinem Standardcomputer, was IS etwas ist, das Sie für Schritt 5 tun müssen.

    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. Nun ist es an der Zeit, ein bootlocal.sh-Skript zu schreiben, das die Zertifikate bei jedem Systemstart an den richtigen Ort kopiert. [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
    

    Fügen Sie Folgendes ein und speichern Sie die Datei:

    #!/bin/sh
    
    mkdir -p /etc/docker/certs.d && cp /var/lib/boot2docker/certs/*.pem /etc/docker/certs.d
    
  6. Starten Sie den Computer neu, entweder mit dem Neustartbefehl innerhalb des Computers oder mit dem Docker-Machine-Befehl vom Docker-Terminal:

    docker-machine restart default
    

Jetzt sollten Sie in der Lage sein, "Hallo-Welt" und andere auszuführen. 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

62
Aaron Helton

Zum Exportieren eines Zertifikats können Sie das Dateiformat " Base-64-codiert x.509 (.CER) " wählen und die Zertifikatserweiterung schließlich in .pem umbenennen. 

1
QiJie Zhang

Eine Möglichkeit, dies zu tun Mit Firefox gehen Sie zu URL: https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io , und klicken Sie auf Details zum Zertifikat anzeigen und als CRT extrahieren.

Kopieren Sie die Datei nach VM, wo das Betriebssystem die CRT speichert:

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

Docker neu starten, und es sollte funktionieren

1