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

So überwachen Sie Oracle-Datenbanken mit Zabbix Agent2

Überblick In Zabbix Version 5.0 und höher wurde e...

Implementierung der Docker Compose-Mehrcontainerbereitstellung

Inhaltsverzeichnis 1. WordPress-Bereitstellung 1....

HTML 5 Vorschau

<br />Original: http://www.alistapart.com/ar...

VMware ESXI-Servervirtualisierungscluster

Inhaltsverzeichnis Zusammenfassung Umgebung und W...

So löschen Sie eine Eigenschaft eines Objekts in JavaScript

1. löschen delete ist die einzige wirkliche Mögli...

Implementierung eines einfachen Chatroom-Dialogs basierend auf WebSocket

In diesem Artikel finden Sie den spezifischen Cod...

Was bedeutet das n nach int(n) in MySQL?

Sie wissen vielleicht bereits, dass die Länge 1 v...

webpack -v Fehlerlösung

Hintergrund Ich möchte die Webpack-Version überpr...

Zusammenfassung mehrerer häufig verwendeter CentOS7-Images basierend auf Docker

Inhaltsverzeichnis 1 Docker installieren 2 Konfig...

33 Eis- und Schnee-Schriftarten zum Download empfohlen (privat und kommerziell)

01 Winterflocken (nur einzeln) 02 Snowtop Caps (k...

20 CSS-Codierungstipps für mehr Effizienz (sortiert)

In diesem Artikel möchten wir eine Sammlung von 2...