Schritte zum Aktivieren von TLS in Docker für eine sichere Konfiguration

Schritte zum Aktivieren von TLS in Docker für eine sichere Konfiguration

Vorwort

Ich hatte zuvor die 2375 Remote API von Docker aktiviert. Ich erhielt eine Anfrage von der Sicherheitsabteilung des Unternehmens, dass ich die Autorisierung aktivieren muss. Ich habe in der offiziellen Dokumentation nachgeschaut.

Schützen Sie den Docker-Daemon-Socket

TLS aktivieren

Generieren Sie auf dem Docker-Server private und öffentliche CA-Schlüssel

$ openssl genrsa -aes256 -out ca-key.pem 4096
Generieren eines privaten RSA-Schlüssels, 4096 Bit langes Modul
............................................................................................................................................................................................................++
........++
e ist 65537 (0x10001)
Geben Sie die Passphrase für ca-key.pem ein:
Überprüfen – Geben Sie die Passphrase für ca-key.pem ein:

$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Geben Sie die Passphrase für ca-key.pem ein:
Sie werden nun aufgefordert, Informationen einzugeben, die
in Ihre Zertifikatsanforderung.
Was Sie jetzt eingeben, ist ein sogenannter Distinguished Name oder DN.
Es gibt eine ganze Reihe von Feldern, aber Sie können einige leer lassen
Für einige Felder gibt es einen Standardwert.
Wenn Sie „.“ eingeben, bleibt das Feld leer.
-----
Ländername (2-Buchstaben-Code) [AU]:
Name des Staates oder der Provinz (vollständiger Name) [Some-State]:Queensland
Ortsname (z. B. Stadt) []:Brisbane
Name der Organisation (z. B. Unternehmen) [Internet Widgits Pty Ltd]:Docker Inc
Name der Organisationseinheit (z. B. Abschnitt) []:Verkauf
Allgemeiner Name (z. B. Server-FQDN oder IHR Name) []:$HOST
E-Mail-Adresse []:[email protected]

Sobald Sie eine Zertifizierungsstelle haben, können Sie einen Serverschlüssel und eine Zertifikatsignieranforderung (CSR) erstellen.

$HOST ist die IP-Adresse Ihres Servers

$ openssl genrsa -out server-key.pem 4096
Generieren eines privaten RSA-Schlüssels, 4096 Bit langes Modul
....................................................................................................++
.................................................................................................................++
e ist 65537 (0x10001)

$ openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

Verwenden Sie als Nächstes die Zertifizierungsstelle, um den öffentlichen Schlüssel zu signieren:

$ echo subjectAltName = DNS:$HOST,IP:$HOST:127.0.0.1 >> extfile.cnf

 $ echo extendedKeyUsage = serverAuth >> extfile.cnf

Schlüssel generieren:

$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
 -CAcreateserial -out server-cert.pem -extfile extfile.cnf
Unterschrift ok
Betreff=/CN=Ihr.Host.com
Abrufen des privaten CA-Schlüssels
Geben Sie die Passphrase für ca-key.pem ein:

Erstellen Sie den Clientschlüssel und die Zertifikatsignieranforderung:

$ openssl genrsa -out key.pem 4096
Generieren eines privaten RSA-Schlüssels, 4096 Bit langes Modul
................................................................++
................++
e ist 65537 (0x10001)

$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr

Ändern Sie extfile.cnf:

echo extendedKeyUsage = clientAuth > extfile-client.cnf

Generieren Sie einen privaten Signaturschlüssel:

$ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
 -CAcreateserial -out cert.pem -extfile extfile-client.cnf
Unterschrift ok
Betreff=/CN=Kunde
Abrufen des privaten CA-Schlüssels
Geben Sie die Passphrase für ca-key.pem ein:

Stoppen Sie den Docker-Dienst und ändern Sie die Docker-Dienstdatei

[Einheit]
Beschreibung=Docker-Anwendungscontainer-Engine
Dokumentation=http://docs.docker.io

[Service]
Umgebung="PFAD=/opt/kube/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/opt/kube/bin/dockerd --tlsverify --tlscacert=/root/docker/ca.pem --tlscert=/root/docker/server-cert.pem --tlskey=/root/docker/server-key.pem -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
ExecStartPost=/sbin/iptables -I WEITER -s 0.0.0.0/0 -j AKZEPTIEREN
ExecReload=/bin/kill -s HUP $MAINPID
Neustart=bei Fehler
NeustartSec=5
LimitNOFILE=unendlich
LimitNPROC=unendlich
LimitCORE=unendlich
Delegieren=ja
KillMode=Prozess

[Installieren]
WantedBy=Mehrbenutzer.Ziel

Starten Sie dann den Dienst neu

systemctl daemon-reload
systemctl Neustart docker.service

Überprüfen Sie den Dienststatus nach dem Neustart:

systemctl status docker.service
● docker.service – Container-Engine für Docker-Anwendungen
  Geladen: geladen (/etc/systemd/system/docker.service; aktiviert; Vendor-Vorgabe: aktiviert)
  Aktiv: aktiv (läuft) seit Donnerstag, 08.08.2019, 19:22:26 CST; vor 1 Minute

Bereits in Kraft.

Herstellen einer Verbindung mithilfe eines Zertifikats:

Kopieren Sie die drei Dateien ca.pem, cert.pem und key.pem auf den Client

docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2375 Version kann verbunden werden

docker-java TLS aktivieren

Das Projekt verwendet den Java-Client docker-java von Docker, um Docker aufzurufen. Um TLS zu unterstützen, müssen Sie beim Erstellen des Clients TLS-Einstellungen hinzufügen.

Kopieren Sie zunächst die drei Dateien ca.pem cert.pem key.pem an einen lokalen Speicherort, zum Beispiel E:\\docker\\",

Setzen Sie dann withDockerTlsVerify in DefaultDockerClientConfig auf true und legen Sie certpath auf das gerade kopierte Verzeichnis fest.

DefaultDockerClientConfig.Builder Builder =
        DefaultDockerClientConfig.createDefaultConfigBuilder()
          .withDockerHost("tcp://" + server + ":2375")
          .withApiVersion("1.30");
      wenn (containerConfiguration.getDockerTlsVerify()) {
        Builder = Builder.mitDockerTlsVerify(true)
          .withDockerCertPath("E:\\docker\\");
      }
  gibt DockerClientBuilder.getInstance(builder.build()).build() zurück

Der große Job ist erledigt.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detailliertes Beispiel für eine Remote-Verbindung zu Docker mithilfe einer TLS-verschlüsselten Kommunikation
  • Docker-Container kommunizieren direkt über Routing, um Netzwerkkommunikation zu erreichen
  • Informationen zur Docker-Sicherheit Probleme mit der Docker-TLS-verschlüsselten Kommunikation

<<:  Eine kurze Einführung in React

>>:  Mysql gibt die Methode zur Datumsbereichsextraktion an

Artikel empfehlen

Detaillierte Analyse jeder Phase der HTTP-Anforderungsverarbeitung von Nginx

Beim Schreiben des HTTP-Moduls von nginx müssen d...

Lösen Sie das Problem inkonsistenter Front- und Back-End-Ports von Vue

Die Front- und Back-End-Ports von Vue sind inkons...

Was ist Flex und ein ausführliches Tutorial zur Flex-Layout-Syntax

Flexibles Layout Flex ist die Abkürzung für Flexi...

Grundlegende Anwendungsbeispiele für benannte Slots in Vue

Vorwort Benannte Slots werden mithilfe des Attrib...

Ich zeige Ihnen, wie Sie Schriftsymbole in CSS verwenden

Zunächst einmal: Was ist ein Schriftsymbol? Oberf...

Eine kurze Diskussion über JS-Verpackungsobjekte

Inhaltsverzeichnis Überblick Definition Instanzme...

Zwei Methoden zur Implementierung der Mysql-Remoteverbindungskonfiguration

Zwei Methoden zur Implementierung der Mysql-Remot...

Analyse impliziter Fehler bei der gleichzeitigen Replikation von MySQL 5.7

Vorwort Die meisten unserer MySQL-Onlineumgebunge...

Implementierung der MySQL-Benutzerrechteverwaltung

1. Einführung in MySQL-Berechtigungen Es gibt 4 T...