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

So konfigurieren Sie eine VMware-Umgebung mit mehreren Knoten

Dieses Tutorial verwendet CentOS 7 64-Bit. Weisen...

So erstellen Sie ein ELK-Protokollsystem basierend auf Docker

Hintergrundanforderungen: Mit zunehmender Größe d...

So überprüfen Sie die Speichernutzung unter Linux

Bei der Behebung von Systemproblemen, Anwendungsv...

Beispielanalyse der Listen-Direktive in Nginx

Handlungsüberblick Im vorherigen Artikel haben wi...

Details zur Datenanzeige der Vue3-Listenschnittstelle

Inhaltsverzeichnis 1. Beispiel für die Anzeige de...

So konfigurieren Sie mehrere Projekte mit demselben Domänennamen in Nginx

Es gibt zwei Möglichkeiten, mit Nginx mehrere Pro...

So fügen Sie einer großen MySQL-Tabelle eine Spalte hinzu

Die Frage wird hier zitiert: https://www.zhihu.co...

Grundlegende Fähigkeiten zum Entwerfen von Web-Frontend-Schnittstellen

[Erforderlich] Benutzeroberfläche PhotoShop/Feuer...

Implementierung der MySQL-Benutzerrechteverwaltung

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

Die HTML-Tag-ID kann eine Variable sein

<table id=" <%=var1%>">, der...

Axios storniert Anfragen und vermeidet doppelte Anfragen

Inhaltsverzeichnis Herkunft Status Quo Anfrage ab...

Installationstutorial für MySQL 5.1 und 5.7 unter Linux

Das Betriebssystem für die folgenden Inhalte ist:...

Verwenden von CSS3 zum Erstellen von Header-Animationseffekten

Die offizielle Website von Netease Kanyouxi (http...

Neue Funktionen in MySQL 8.0 - Einführung in Check Constraints

Inhaltsverzeichnis Vorwort Einschränkungen prüfen...