Extern geliefertes Zertifikat verwenden, statt es zu kopieren

Liefert eine fremde Stelle das Zertifikat in ein Verzeichnis und
ersetzt es dort beim Erneuern - gleicher Dateiname, neuer Inhalt -,
passt der uebliche Weg nicht: der Proxy Manager kopiert hochgeladene
Zertifikate nach /data/custom_ssl/npm-<id>/ und bekommt von einer
ersetzten Datei nichts mit.

Das Verzeichnis wird deshalb schreibgeschuetzt als /certs in den
Container gehaengt (neuer Mount in der compose-Datei, Vorgabe
./data/npm/external-certs), und "cert external" ersetzt die beiden
Dateien unter custom_ssl durch Verweise darauf. Am Abbild
jc21/nginx-proxy-manager:2 nachgemessen: nginx liefert danach das
externe Zertifikat, und ein Austausch der Datei wirkt - allerdings erst
nach einem Neuladen.

Genau das ist der Haken, und er ist belegt: ohne Neuladen liefert nginx
weiterhin das alte Zertifikat. Dafuer gibt es

  cert external --refresh      vergleicht den SHA256-Fingerabdruck mit
                               dem zuletzt gesehenen und laedt nur bei
                               Aenderung neu
  cert external --watch on     traegt das als taeglichen cron-Eintrag ein

Vor dem Umstellen wird geprueft, ob beide Dateien lesbar sind, ob
Zertifikat und Schluessel zusammengehoeren (Vergleich der oeffentlichen
Schluessel - das faengt auch EC-Schluessel) und wie lange es noch gilt.
Beide Faelle sind durchgespielt: ein fremder Schluessel wird abgelehnt,
ein in fuenf Tagen ablaufendes Zertifikat gemeldet.

"cert external --off --id N" nimmt es zurueck und legt wieder eigene
Kopien an. In der Oberflaeche ist aus dem Menuepunkt "Zertifikat" ein
kleines Menue geworden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 22:05:20 +02:00
co-authored by Claude Opus 5
parent 81ff194bd1
commit 4456f8c3ea
7 changed files with 522 additions and 0 deletions
+20
View File
@@ -220,3 +220,23 @@ FW_AGENT=off
# Anfuehrungszeichen (das erledigt "cmk-manage.sh config set" selbst).
# FW_EXTRA_PORTS=3000/tcp=Grafana,5667/tcp=NSCA,514/udp=Syslog
FW_EXTRA_PORTS=
# ---------------------------------------------------------------------
# Von aussen geliefertes Zertifikat
#
# Wird das Zertifikat von einer fremden Stelle in ein Verzeichnis
# gelegt und beim Erneuern dort ersetzt (gleicher Dateiname, neuer
# Inhalt), dann zeigt der Proxy Manager auf diese Dateien, statt sie zu
# kopieren. Das Verzeichnis wird schreibgeschuetzt als /certs in den
# Container gehaengt - nach einer Aenderung ist ein "up" noetig.
#
# cmk-manage.sh cert external --domain kunde.example.com
# ---------------------------------------------------------------------
CERT_EXTERNAL_DIR=./data/npm/external-certs
CERT_EXTERNAL_FULLCHAIN=fullchain.pem
CERT_EXTERNAL_KEY=privkey.pem
# Taeglich nachsehen, ob die Datei ausgetauscht wurde, und nginx dann
# neu laden. Ohne das liefert nginx bis zum naechsten Neustart weiter
# das alte Zertifikat.
CERT_EXTERNAL_WATCH=off