Machine: Empfohlene Methode zum Installieren des CA-Zertifikats auf einem lokalen VM-Docker-Computer

Erstellt am 3. Sept. 2015  ·  34Kommentare  ·  Quelle: docker/machine

Normalerweise wird das Root-CA-Zertifikat des Unternehmens von der IT auf den Computern und Servern der Entwickler installiert (sie werden nicht mit dem Betriebssystem geliefert). Müssen wir bei Verwendung eines Docker-Computers mit lokalen VMs (Virtualbox) das Stamm-CA-Zertifikat des Unternehmens auf dem VM installieren, um mit einer im Unternehmensnetzwerk gehosteten Docker-Registrierung zu kommunizieren?

Ich frage mich, wie Sie das CA-Zertifikat auf meiner lokalen VM installieren sollten. Scheint hier ein Anfang der Antwort zu sein , aber nichts Überzeugendes / Richtiges.

Und wenn es Zwischenunternehmens-CAs gibt, was ist der empfohlene Weg? Alle Zertifikate bündeln?

areidentity

Hilfreichster Kommentar

Dies erforderte viel Graben und die Lösung ist peinlich einfach (aber nicht offensichtlich). Und es gibt ein paar Dinge zu beachten. Die Antwort war hier - aber Sie müssen den Codeabschnitt zum alternativen Ansatz überlesen.

Kopieren Sie grundsätzlich Pem-Versionen (Base64-codiert) Ihrer CA-Vertrauenskette in /var/lib/boot2docker/certs/ . Sie können keine Ca-Bundles verwenden. Das Boot-Skript boot2docker holt dort automatisch Pem-Dateien ab und fügt sie der SSL-Konfiguration hinzu. Außerdem ist dies ein spezielles Verzeichnis und wird bei Neustarts beibehalten.

$ 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 

Dies sollte einfacher sein, also unterstütze ich (#1799). Darüber hinaus sollten wir in der Lage sein, ein Verzeichnis voller PEM-Dateien anzugeben, damit das Hinzufügen mehrerer Zertifikate (wie in ganzen Vertrauensketten) einfach ist.

Alle 34 Kommentare

Das würde ich auch gerne wissen. Ich habe das Verfahren (https://docs.docker.com/articles/https/) befolgt, um eine neue Zertifizierungsstelle und Zertifikate zu erstellen. Ich habe versucht, die Dateien /var/lib/boot2docker und /var/lib/boot2docker/tls abzulegen, habe aber Probleme mit dem /etc/init.d/docker-Startskript, das das von mir generierte Zertifikat überschreibt.

Ich habe mir das etwas genauer angesehen und es sieht so aus, als würde docker-machine alles im Host .docker/machines/machine/default mit den von ihm generierten Zertifikaten überschreiben. Es ersetzt auch Dateien in der boot2docker-VM in /var/lib/boot2docker. Es ist möglich, sich in der VM anzumelden und Dateien zu ersetzen und /var/lib/boot2docker/profile zu aktualisieren, aber dies wird auch beim Start ersetzt (nicht sicher durch was, aber möglicherweise durch 'docker-machine env default').

@oobles sollten Sie die --tls-ca-cert , --tls-cert und --tls-key können, um vorhandene Zertifikate anzugeben.

Bei Verwendung von docker-machine --tls-ca-cert=my_company_ca.pem create --driver virtualbox vm schlägt der Befehl fehl in:

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

Der Punkt hier (und ich denke in den meisten Unternehmen) ist, dass ich die Option --tls-ca-key angeben kann, weil ich die CA des Unternehmens nicht verwalte, daher kenne ich den privaten Schlüssel nicht.

Was fehlt mir hier? Sind diese Optionen nur für Personen nützlich, die ihre eigene Zertifizierungsstelle verwalten und ihre eigenen Zertifikate signieren?

Ich möchte nur, dass mein Docker-Client (auf meiner VM) auf docker login in unsere Firmenregistrierung eingetragen wird, die ein von der Firmenzertifizierungsstelle unterzeichnetes Zertifikat zeigt.

Irgendeine Hilfe ?

Gleiches Problem hier irgendwelche Verbesserungen?

+1. Gleiches Problem in unserer Organisation.

Die Art und Weise, wie ich mit der Situation umgehe, war:
Auf dem Registrierungsserver:

  1. Erstellen Sie die selbstsignierten Zertifikate als Status in der Docker-Dokumentation.
  2. Erstellen Sie eine .pem-Datei, die den Schlüssel und die Zertifikatsdatei verkettet

Auf der Docker-Maschine:

  1. kopiere per scp die pem-Datei in dein [email protected] :/home/docker
  2. über ssh [email protected] (Passwort: tcuser) verschieben Sie die PEM-Datei nach: /var/lib/boot2docker/certs/
  3. Docker-Maschine neu starten

Meine Container-Builds haben beim Herunterladen von einer https-Verbindung unable to find valid certification . Mein Unternehmen verwendet ein ZScaler CA-Root-Zwischenzertifikat und verwendet auch eine PAC-Datei, um den Proxy automatisch zu konfigurieren.

+1 dazu. Wenn es möglich wäre, vorhandene CA- (Zertifikat und Schlüssel) und Client-Zertifikate (Zertifikat und Schlüssel) wiederzuverwenden, sollte es wirklich möglich sein, die vorhandene TLS-Infrastruktur beim Bereitstellen von Zertifikaten für die Docker-Engine mit Docker-Maschine wiederzuverwenden, z

  • --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 springt für mich ein, weil cacert.key passwortgeschützt ist.

+1

👍 , da dies für uns ein großer Blocker ist. Unsere Unternehmens-IT-Organisation erstellt ein benutzerdefiniertes HTTPS-Zertifikat für alle Anfragen, die von unserer Unternehmens-Firewall an das öffentliche Internet gehen, sodass wir Docker Hub nicht einmal für Container kontaktieren können, ohne diese Zertifikate richtig konfigurieren zu können.

Hat dafür schon jemand eine Lösung gefunden? Unsere Unternehmens-IT führt ein MitM durch, um alle HTTPS-Zertifikate zu ersetzen.

Als ich es versuchte...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default es wirft den folgenden Fehler

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

Am Ende habe ich das tls-Zertifikat zum Zeitpunkt der Maschinenerstellung übersprungen. Einmal erstellen
Die Maschine:

docker-machine scp certfile default:ca.crt
docker-machine ssh default
sudo mv ~/ca.crt /etc/docker/certs.d/docker.io/ca.crt

Dann sollte es funktionieren. Möglicherweise müssen Sie die Unterverzeichnisse vor dem mv . mkdir
Befehl. Ersetzen Sie bei Bedarf docker.io durch einen internen Registrierungshost.

Am Donnerstag, 11. August 2016, schrieb Andy Ruestow [email protected] :

Hat dafür schon jemand eine Lösung gefunden? Unsere Unternehmens-IT macht MitM
Ersetzen Sie alle HTTPS-Zertifikate.

Als ich es versuchte...
docker-machine --tls-ca-cert root.cer create --driver virtualbox default
es wirft den folgenden Fehler

Fehler beim Erstellen der Maschine: Fehler beim Ausführen der Bereitstellung: Fehler beim Generieren
Serverzertifikat: crypto/tls: privater Schlüssel stimmt nicht mit öffentlichem Schlüssel überein


Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/machine/issues/1799#issuecomment -239175647,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AAJD9p1tfX97V_OW4DgJkzxP86URi-C5ks5qezAsgaJpZM4F3GTM
.

+ 1 GE verwendet Zscaler und führt MitM-Cert-Mangling durch, und Docker ist derzeit von allen unseren Entwicklercomputern nicht verwendbar.

+1, versuche das Problem auch gerade zu lösen.

+1, versuche auch, dies in einer Unternehmensumgebung zu lösen

+1 auch Unternehmensumgebung, Proxy führt MitM-Zertifikatsmangel durch. Benötigen Sie eine Möglichkeit, Zertifikate zu installieren.

Dies erforderte viel Graben und die Lösung ist peinlich einfach (aber nicht offensichtlich). Und es gibt ein paar Dinge zu beachten. Die Antwort war hier - aber Sie müssen den Codeabschnitt zum alternativen Ansatz überlesen.

Kopieren Sie grundsätzlich Pem-Versionen (Base64-codiert) Ihrer CA-Vertrauenskette in /var/lib/boot2docker/certs/ . Sie können keine Ca-Bundles verwenden. Das Boot-Skript boot2docker holt dort automatisch Pem-Dateien ab und fügt sie der SSL-Konfiguration hinzu. Außerdem ist dies ein spezielles Verzeichnis und wird bei Neustarts beibehalten.

$ 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 

Dies sollte einfacher sein, also unterstütze ich (#1799). Darüber hinaus sollten wir in der Lage sein, ein Verzeichnis voller PEM-Dateien anzugeben, damit das Hinzufügen mehrerer Zertifikate (wie in ganzen Vertrauensketten) einfach ist.

@rpomeroy vielen Dank, ich habe alles gleich gemacht, wusste aber nicht, dass ein VM-Neustart erforderlich ist und habe das Zertifikat deshalb überall kopiert, damit es funktioniert

Alle Fixes für Docker für Windows

@rpomeroy Danke. /etc/docker/certs.d/hostname/

Wie bereits im Thread erwähnt, ist die Linux-Distribution unter boot2docker im Grunde unveränderlich, sodass das Einfügen von Dingen in /etc/docker/certs nicht überlebt. Nur var/lib/boot2docker/certs ist veränderbar und persistent. Beachten Sie, dass alle diese Informationen möglicherweise mit neueren Versionen von boot2docker erneut überprüft werden müssen.

Ich verwende Windows 7 + VirtualBox (v5.2.6) + Docker Toolbox (Boot2Docker Version 18.02.-ce) und hatte das gleiche Problem.
Wenn ich beispielsweise versuche, einen Container auszuführen, erhalte ich die folgende Fehlermeldung:
docker führt ubuntu /bin/echo 'Hallo Welt' aus
Bild ' ubuntu:latest ' kann lokal nicht gefunden werden
C:\Programme\Docker Toolboxdocker.exe: Fehlerantwort vom Daemon: Holen Sie sich https://registry-1.docker.io/v2/ : x509: Zertifikat von unbekannter Autorität signiert.
Siehe 'C:\Programme\Docker Toolboxdocker.exe run --help'.

Bei mir hat folgende Lösung funktioniert:

  1. Melden Sie sich bei der Standard-Docker-VM an
  2. Laden Sie die Stammzertifikate Ihres Unternehmens herunter
  3. Erstellen Sie ein neues Verzeichnis:
    sudo mkdir /var/lib/boot2docker/certs
  4. Kopieren Sie die Stammzertifikate Ihres Unternehmens in den neu erstellten Ordner:
    sudo cp Root-Ca1.crt Root-Ca2.crt /var/lib/boot2docker/certs
  5. Standard-VM neu starten
    Jetzt zieht es das Bild :)

@kvvoronina ich stehe mit dir vor dem gleichen Problem. Stattdessen führe ich die Docker-Toolbox unter Win 8.1 aus
Ich versuche, Ihre Schritte zu verwenden. aber ich verwende eine direkte Verbindung (bedeutet, dass ich in Schritt 2 und 4 keine Stammzertifikate des Unternehmens bereitstellen kann). wie kann man das lösen? Danke

Hallo,

danke Geist, es ist Arbeit und ich kann jetzt mein Bild ziehen.
Aber ich kann das Bild dieses Beispiels nicht erstellen: https://docs.docker.com/get-started/part2/#build -the-app
bekomme diesen Fehler:
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/
Hast du dafür ein Problem?

Ubel, ich habe das gleiche Problem, ich muss Bilder abrufen, aber ich kann keine Bilder mit der Docker-Erste Schritte-Komplettlösung erstellen. Konnten Sie das Problem lösen?

@cmenjivar : Nein, ich habe immer noch das gleiche Problem...

@Ubel : Ich habe eine Lösung in Ihrem Dockerfile gefunden, fügen Sie einfach alle 3 gehosteten Python-Hosts hinzu, anstatt nur einen ...

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

@cmenjivar : danke für deine Hilfe. bei mir funktioniert es auch.

Jetzt muss ich die gleichen Dinge mit der Nuget-Paket-URL ausprobieren

Könnte jemand dies für Windows-Host und Windows-Container aktualisieren?

Für was es wert ist, hat @rpomeroy die richtige Antwort ...

Geben Sie die folgenden Befehle im "Docker Quickstart Terminal" aus, wenn Sie Windows verwenden, um sicherzustellen, dass Sie über die entsprechende Umgebung verfügen. Das "$" ist die Eingabeaufforderung, fügen Sie diesen Teil nicht ein. Möglicherweise möchten Sie ein cd ~/Downloads ausgeben, um zu Ihrem Downloads-Ordner zu gelangen, bevor Sie die folgenden Befehle ausführen. Sie können die beiden mittleren Schritte (corp-ca.pem) für jede hinzuzufügende Zertifizierungsstelle (mittlere oder andere) wiederholen, geben Sie ihnen einfach einen anderen Namen. Sie können auch einen Platzhalter verwenden, zum Beispiel: corp-*.pem wenn Sie corp-ca-root.pem, corp-ca-intermediate.pem und corp-issuing-ca.pem hatten.

kopiert von @rpomeroy oben:

$ 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 

Leute, die versuchen --tls-cert, --tls-key und --tls-ca-cert zu verwenden, verwenden falsche Optionen. Diese dienen der Authentifizierung zwischen Docker-Client und Server.

Der einzige Punkt, den ich anmerken möchte, ist, dass die Dateisysteme in /etc nicht wirklich "unveränderlich" sind, sondern "ephemer" (tmpfs), was bedeutet, dass sie bei jedem Neustart verschwinden. Die Informationen in /var/lib/boot2docker/certs werden an der richtigen Stelle in /etc/docker/certs...

Wie auch immer, es wäre schön, wenn die Docker-Maschine automatisch allen Zertifikaten vertraut, denen das Host-System vertraut.

Für diejenigen, die diese Lösung vielleicht verlassen haben und denken, dass sie nur für das boot2docker-Setup und nicht für das Docker für Windows (Hyper-V) -Setup funktionieren würde , scheint dies (

@rpomeroy ‚s Lösung funktioniert sowohl für boot2docker und Docker für Windows.

Ich habe die .cer-Zertifikate meines Unternehmens in das Verzeichnis /etc/pki/ca-trust/source/anchors meines Docker-Containers hochgeladen und die folgenden Befehle eingegeben.

update-ca-trust aktivieren
update-ca-trust

Nachdem ich die obigen Schritte ausgeführt hatte, konnte ich die erforderliche Ausgabe von curl erhalten

Einfach reinschnuppern..

Das Hinzufügen dieser beiden Mounts zu Ihrem Container scheint mit den meisten Konfigurationen zu funktionieren:

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

Windows ist eine andere Geschichte. Ich würde die Verwendung eines Windows Docker-Hosts nach Möglichkeit vermeiden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen