Lösen Sie das Problem des Ablaufs des TLS-Zertifikats (SSL) von Docker

Lösen Sie das Problem des Ablaufs des TLS-Zertifikats (SSL) von Docker

Problemphänomen:

[root@localhost ~]# Docker-Image ziehen xxx.com.cn/centos7

Standard-Tag verwenden: latest

Fehlerantwort vom Daemon: Get https://xxx.com.cn/v1/_ping: x509: Zertifikat ist abgelaufen oder noch nicht gültig

Mögliche Ursachenanalyse:

Linux prüft anhand des Datums die aktuelle Uhrzeit und vergleicht sie mit der Gültigkeitsdauer des Zertifikats, um den konkreten Grund zu ermitteln. Dieser kann einer der folgenden beiden sein:

1. Die Uhrzeit dieser Maschine ist falsch;

2. Das Zertifikat des Registers ist tatsächlich abgelaufen;

Lösung:

1. Die Uhrzeit dieser Maschine ist falsch;

Ändern Sie einfach die Ortszeit

2. Das Zertifikat des Registers ist tatsächlich abgelaufen;

Erstellen Sie eine SSL-Sicherheitsausnahme für die Registry und verzichten Sie auf die Gültigkeitsprüfung des Registry-Server-Zertifikats. Dies birgt jedoch Sicherheitsrisiken.

Wenn unsichere Register aktiviert sind, versucht Docker mit den folgenden Schritten, eine Verbindung zu https herzustellen:

Versuchen Sie zuerst, HTTPS zu verwenden.

Wenn die HTTPS-Verbindung erreichbar ist, das Zertifikat jedoch nicht verfügbar ist, ignorieren Sie den Zertifikatsfehler.

Wenn keine HTTPS-Verbindung verfügbar ist, wird HTTP verwendet.

CentOS: Erstellen Sie eine Daemon-Konfigurationsdatei daemon.json im Verzeichnis /etc/docker/ und schreiben Sie das IP-Adresssegment Ihres Zielregisters oder den spezifischen Dienstdomänennamen und die Portnummer in die JSON-Datei.

Beispielsweise ist das Netzwerksegment, in dem sich mein Server befindet, 10.0.0.0/8. Der Inhalt lautet dann wie folgt:

{
 "unsichere Registrierungen" : ["10.0.0.0/8"]
}
 

Sie können auch den Domänennamen und die Portnummer verwenden, wie unten gezeigt:

{
 "unsichere Registrierungen" : ["myregistrydomain.com:5000"]
}

Unter Windows ändern Sie die Datei C:\ProgramData\docker\config\daemon.json. Das Format ist das gleiche wie bei Linux.

Starten Sie den Docker-Dienst neu.

Prüfen Sie die Wirksamkeit und achten Sie auf das Feld „Unsichere Registrierungen“.

[root@localhost ~]# Docker-Info
 
Docker-Informationen:
Behälter: 0
 Laufen: 0
 Pausiert: 0
 Angehalten: 0
Bilder: 2
Serverversion: 17.05.0-ce
Speichertreiber: Overlay
 Unterstützendes Dateisystem: xfs
 Unterstützt d_type: true
Protokollierungstreiber: JSON-Datei
Cgroup-Treiber: cgroupfs
Plugins:
 Lautstärke: lokal
 Netzwerk: Bridge-Host Macvlan Null-Overlay
Schwarm: inaktiv
Laufzeiten: runc
Standardlaufzeit: runc
Binärdatei initialisieren: docker-init
Containerd-Version: 9048e5e50717ea4497b757314bad98ea3763c145
runc-Version: 9c2d8d184e5da67c95d601382adf14862e4f2228
Init-Version: 949e6fa
Sicherheitsoptionen:
 sicherheitskomp
 Profil: Standard
Kernel-Version: 3.10.0-693.el7.x86_64
Betriebssystem: CentOS Linux 7 (Core)
Betriebssystemtyp: Linux
Architektur: x86_64
CPUs: 24
Gesamtspeicher: 62,74 GiB
Name: localhost.localdomain
ID: 755F:OEFV:VP3S:BMGQ:VUFW:WGT5:YQHO:EW6T:AAVE:NHS2:TPV3:SBTJ
Docker-Stammverzeichnis: /var/lib/docker
Debug-Modus (Client): false
Debug-Modus (Server): false
Registrierung: https://index.docker.io/v1/
Experimentell: falsch
Unsichere Register:
 10.0.0.0/8
 127.0.0.0/8
Live-Wiederherstellung aktiviert: false

So überprüfen Sie die Gültigkeitsdauer eines Serverzertifikats

Nehmen wir Firefox als Beispiel

Ergänzung: Ersetzen Sie abgelaufene selbstsignierte Zertifikate im privaten Docker-Repository

Ersetzen des Docker-Registrierungszertifikats

Beim Abrufen des Bildes wird der folgende Fehler gemeldet:

k8s@master:~/shiyu$ docker pull reg.netlab.com/tensorflow-cpu
Standard-Tag verwenden: latest
Fehlerantwort vom Daemon: Get https://reg.netlab.com/v2/: x509: Zertifikat ist abgelaufen oder noch nicht gültig

Überprüfen Sie, ob das Zertifikat in /etc/docker/certs abgelaufen ist

root@master:~# openssl x509 -in /etc/docker/certs.d/reg.netlab.com/reg.netlab.com.crt -noout -dates
nicht vorher=1. April 2019, 13:21:22 GMT
notAfter=31. März 2020, 13:21:22 GMT

Offenbar ist das selbstsignierte Zertifikat am 31. März 2020 abgelaufen.

Ein neues Zertifikat erneut signieren

Erstellen Sie einen Ordner „~/certs“ zum Speichern von Schlüsseln und privaten Schlüsseln

mkdir -p ~/Zertifikate

Schlüssel generieren

cd ~/Zertifikate
openssl genrsa -out reg.netlab.com.key 2048

Schlüsseldatei generieren

openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.netlab.com.key -x509 -days 365 -out reg.netlab.com.crt

Geben Sie die relevanten Informationen ein

Ländername (2-Buchstaben-Code) [XX]:CN # Ihr Ländername Name des Staates oder der Provinz (vollständiger Name) []:guangdong
# Name der Provinz/Ortschaft (z. B. Stadt) [Standardstadt]:guagnzhou # Name der Stadt/Organisation (z. B. Unternehmen) [Standardunternehmen Ltd]:sysu
# Name der Organisationseinheit (z. B. Abschnitt) []:netlab # Allgemeiner Name (z. B. Ihr Name oder der Hostname Ihres Servers) []:reg.netlab.com # E-Mail-Adresse []:[email protected]

An diesem Punkt ist die Selbstsignierung des Zertifikats abgeschlossen.

Fügen Sie das Zertifikat zum Docker-Stammzertifikat hinzu und starten Sie Docker neu.

Hinweis: Da es sich um ein selbstsigniertes Zertifikat handelt, wird es von Docker standardmäßig nicht als vertrauenswürdig eingestuft. Sie müssen das Zertifikat daher zum Stammzertifikat von Docker hinzufügen. In CentOS 7/Ubuntu 18 lautet der Zertifikatspeicherpfad /etc/docker/certs.d/Domänenname:

Fügen Sie das Zertifikat zum Docker-Stammzertifikat hinzu

mkdir -p /etc/docker/certs.d/reg.netlab.com
cp ~/certs/reg.netlab.com.crt /etc/docker/certs.d/reg.netlab.com/

Starten Sie Docker neu

systemctl Neustart Docker

Ersetzen abgelaufener Zertifikate in Docker-Registrierungscontainern

Anzeigen der Registrierungscontainer-ID

k8s@master:~$ docker ps |grep-Registrierung
3eb5eda4b75e registry.docker-cn.com/library/registry:2 "/entrypoint.sh /etc…" vor 13 Monaten Aktiv 44 Minuten 0.0.0.0:443->5000/tcp-Registrierung
b84ea71a572f f32a97de94e1 "/entrypoint.sh /etc…" vor 13 Monaten Aktiv Ungefähr eine Stunde 0.0.0.0:5000->5000/tcp registry_mirror

Den Mount-Pfad der Rigstry nach ID anzeigen

k8s@master:~$ docker inspect 3eb5eda4b75e
...
"Bindet": [
   "/root/certs:/certs",
   "/home/registry:/var/lib/registry"
  ]
...

cp das neu generierte Zertifikat in das Verzeichnis /root/certs:/certs

root@master:~/certs#ll
Gesamtdosis 16
drwxr-xr-x 2 root root 4096 1. April 2019 ./
drwx------ 8 root root 4096 2. Mai 14:06 ../
-rw-r--r-- 1 root root 2126 1. April 2019 reg.netlab.com.crt
-rw------ 1 root root 3272 1. April 2019 reg.netlab.com.key

Starten Sie den Registrierungscontainer neu

k8s@master:~$ systemctl Neustart Docker

An diesem Punkt wurde das selbstsignierte Zertifikat aktualisiert!

prüfen

k8s@master:~/shiyu$ docker pull reg.netlab.com/tensorflow-cpu
Standard-Tag verwenden: latest
neueste: Ziehen von Tensorflow-CPU
Zusammenfassung: sha256:68da50778a5f80e0676c4ca617299444fc71677a2d83cacccaf7a08d08cc1df6
Status: Das Bild ist aktuell für reg.netlab.com/tensorflow-cpu:latest

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Shell-Skript zur Überprüfung, ob das Domänennamenzertifikat abgelaufen ist Prozessanalyse
  • Shell-Skript zum Generieren eines selbstsignierten SSL-Zertifikats
  • Beispiel für ein Skript zur Überwachung des Ablaufs von SSL-Zertifikaten

<<:  Einführung in die Verwendung des MySQL mysqladmin-Clients

>>:  Reines CSS zum Erreichen einer einzelnen Div-Transformation eines regulären Polygons

Artikel empfehlen

Implementierung der automatischen Vervollständigung von Docker-Befehlen

Vorwort Ich weiß nicht, wie lange dieser Freund D...

Reines js, um den Effekt eines Karussells zu erzielen

In diesem Artikel wird der spezifische Code von j...

Ein Artikel zum Verständnis von Linux-Festplatten und Festplattenpartitionen

Vorwort Alle Hardwaregeräte im Linux-System werde...

Verstehen von MySQL-Deadlock-Routinen durch eindeutige Index-S-Sperre und X-Sperre

In „MySQL-Deadlock-Probleme anhand des Quellcodes...

JS implementiert den Beispielcode der Dezimalkonvertierung in Hexadezimal

Vorwort Beim Schreiben von Code stoßen wir gelege...

So installieren Sie Docker auf CentOS

Hier stellen wir nur die relativ einfache Install...

Allgemeine Datentypen in MySQL 5.7

——Anmerkungen aus „MySQL in einfachen Worten (zwe...

Tomcat erhält den Clientdomänennamen des Nginx-Reverse-Proxys

Frage Nach dem Nginx-Reverse-Proxy erhält die Tom...

Zusammenfassung der Wissenspunkte des Datenbankindex

Inhaltsverzeichnis Erster Blick-Index Das Konzept...

So implementieren Sie das Rasterlayout mit Intervallen perfekt auf der Seite

Typische Layoutbeispiele Wie im obigen Bild gezei...

Eine detaillierte Einführung in die Betriebssystemebenen von Linux

Inhaltsverzeichnis 1. Einführung in die Linux-Sys...

Tutorial zur Installation von MySQL 5.6 mit RPM in CentOS

Alle vorherigen Projekte wurden in der Windows-Sy...

Sprechen Sie über nextTick in Vue

Wenn sich die Daten ändern, wird die DOM-Ansicht ...