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:
@@ -557,6 +557,8 @@ Die wichtigsten Schalter:
|
||||
| `BACKUP_DIR` | Ablage für **manuelle** Backups (Vorgabe `./backups`); geplante Jobs haben eigene Pfade |
|
||||
| `BACKUP_AUTO` | `on`/`off` – sollen die Backup-Jobs per cron laufen? |
|
||||
| `CERT_DOMAIN`, `CERT_DAYS` | Vorgaben für selbstsignierte Zertifikate |
|
||||
| `CERT_EXTERNAL_DIR`, `CERT_EXTERNAL_FULLCHAIN`, `CERT_EXTERNAL_KEY` | Verzeichnis und Dateinamen eines von außen gelieferten Zertifikats |
|
||||
| `CERT_EXTERNAL_WATCH` | täglich prüfen, ob es ausgetauscht wurde |
|
||||
| `FW_ROLE` | `single`/`central`/`remote` – Rolle im verteilten Monitoring, steuert die Firewall-Prüfung |
|
||||
| `FW_EC_SYSLOG`, `FW_EC_SNMPTRAP`, `FW_EC_TCP` | Event Console: Syslog (514), SNMP-Traps (162/udp), Status über TCP (6558) |
|
||||
| `FW_AGENT` | läuft auf diesem Host ein Checkmk-Agent im Pull-Betrieb? (6556) |
|
||||
@@ -1747,6 +1749,75 @@ Ziele prüfen**.
|
||||
> Proxy erreicht, genau wie Checkmk auf 5000. `firewall close` bietet einen
|
||||
> versehentlich geöffneten Port wieder an.
|
||||
|
||||
### 10.13 Ein von außen geliefertes Zertifikat verwenden
|
||||
|
||||
Wenn eine fremde Stelle das Zertifikat in ein Verzeichnis legt und es beim
|
||||
Erneuern dort **ersetzt** – gleicher Dateiname, neuer Inhalt –, passt der
|
||||
übliche Weg nicht: Der Proxy Manager kopiert hochgeladene Zertifikate nach
|
||||
`/data/custom_ssl/npm-<id>/` und bekommt von einer ersetzten Datei nichts mit.
|
||||
|
||||
Deshalb wird das Verzeichnis **schreibgeschützt als `/certs` in den Container
|
||||
gehängt**, und die beiden Dateien unter `custom_ssl` werden durch Verweise
|
||||
darauf ersetzt:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh config set CERT_EXTERNAL_DIR /etc/ssl/kunde
|
||||
./scripts/cmk-manage.sh up # Container neu erstellen, damit er /certs sieht
|
||||
./scripts/cmk-manage.sh cert external --domain kunde.example.com
|
||||
```
|
||||
|
||||
| Einstellung | Bedeutung |
|
||||
|---|---|
|
||||
| `CERT_EXTERNAL_DIR` | Verzeichnis auf dem Host (Vorgabe `./data/npm/external-certs`) |
|
||||
| `CERT_EXTERNAL_FULLCHAIN` | Dateiname der Zertifikatskette (Vorgabe `fullchain.pem`) |
|
||||
| `CERT_EXTERNAL_KEY` | Dateiname des privaten Schlüssels (Vorgabe `privkey.pem`) |
|
||||
| `CERT_EXTERNAL_WATCH` | täglich auf Austausch prüfen (`on`/`off`) |
|
||||
|
||||
Vor dem Umstellen wird geprüft, ob beide Dateien lesbar sind, **ob Zertifikat
|
||||
und Schlüssel zusammengehören** (Vergleich der öffentlichen Schlüssel) und wie
|
||||
lange es noch gilt:
|
||||
|
||||
```
|
||||
[FEHLER] Zertifikat und Schluessel gehoeren nicht zusammen.
|
||||
[ WARN ] Das Zertifikat laeuft in weniger als 14 Tagen ab (Sep 25 20:03:58 2026 GMT).
|
||||
```
|
||||
|
||||
**Der Austausch allein genügt nicht.** nginx liest Zertifikatsdateien beim
|
||||
Start und beim Neuladen – nachgemessen an einem ausgetauschten Zertifikat:
|
||||
|
||||
| | ausgeliefert |
|
||||
|---|---|
|
||||
| Datei ersetzt, kein Neuladen | **altes** Zertifikat |
|
||||
| nach `nginx -s reload` | neues Zertifikat |
|
||||
|
||||
Dafür gibt es zwei Wege:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh cert external --refresh # einmalig, lädt nur bei Änderung neu
|
||||
sudo ./scripts/cmk-manage.sh cert external --watch on # täglich per cron
|
||||
```
|
||||
|
||||
`--refresh` vergleicht den SHA256-Fingerabdruck mit dem zuletzt gesehenen
|
||||
(`cert-external.state`) und lädt nginx nur dann neu. Der Wächter schreibt dafür
|
||||
`/etc/cron.d/checkmk-cert-external`.
|
||||
|
||||
Zurück auf eine eigene Kopie – danach lebt der Proxy Manager wieder mit seinen
|
||||
eigenen Dateien weiter:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh cert external --off --id 3
|
||||
```
|
||||
|
||||
`cert external` ohne Angabe zeigt den Stand: Verzeichnis, Ablaufdatum,
|
||||
Aussteller, ob `/certs` im Container ankommt, welche Zertifikate darauf zeigen
|
||||
und ob der Wächter eingetragen ist. In der Oberfläche liegt alles unter
|
||||
**Selbstsigniertes Zertifikat erzeugen → Extern geliefertes Zertifikat
|
||||
verwenden**.
|
||||
|
||||
> Wird das Zertifikat im Proxy Manager über die **Weboberfläche** neu
|
||||
> hochgeladen, ersetzt er die Verweise wieder durch Kopien. Dann einmal
|
||||
> `cert external --domain …` nachziehen.
|
||||
|
||||
---
|
||||
|
||||
## 11. Proxy Manager lokal einrichten (Terminal-Browser)
|
||||
@@ -2492,6 +2563,7 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut.
|
||||
| `npm-reset` | Datenbank beiseitelegen, damit das Konto neu entsteht |
|
||||
| `proxy status\|list\|certs\|add\|del` | Proxy-Hosts über die API anlegen und verwalten |
|
||||
| `cert …` | selbstsigniertes Zertifikat erzeugen |
|
||||
| `cert external …` | von außen geliefertes Zertifikat verwenden (verweisen statt kopieren) |
|
||||
| `firewall [check\|open\|close]` | prüfen, öffnen und nicht mehr Benötigtes wieder schließen (firewalld, ufw, nftables, iptables); `close --keep-admin` lässt den Adminport offen |
|
||||
| `shell` | Root-Shell im Checkmk-Container |
|
||||
| `omd …` | beliebiges `omd`-Kommando im Container |
|
||||
|
||||
Reference in New Issue
Block a user