Cert renewal switched to DNS-01 (IONOS): test issuance validated end-to-end (LE YR1, valid to 2026-11-12), the shared letsencrypt resolver now renews rohana/selendis via DNS-01, so the September renewal needs no open port 443. Syncs the canonical file with the already-closed git.lab tracker issue 7. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
93 lines
5.0 KiB
Markdown
93 lines
5.0 KiB
Markdown
---
|
|
type: issue
|
|
id: "0007"
|
|
status: done
|
|
created: 2026-08-01
|
|
milestone: M1
|
|
priority: high
|
|
due: 2026-09-28
|
|
host: cfgmon
|
|
gitlab_iid: "7"
|
|
related: []
|
|
---
|
|
# CFGMON-01: Zertifikatserneuerung braucht offene Ports — zeitkritisch ab 2026-09-28
|
|
|
|
> Import aus [management#7](https://git.lab/axion1337.chat/management/-/issues/7) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012).
|
|
|
|
Certs für `selendis`/`rohana` laufen am **2026-10-28** ab; Traefik erneuert ab
|
|
Ende September via TLS-ALPN-01 — braucht **Port 443 offen aus dem ganzen Internet**
|
|
(LE veröffentlicht keine Validierungs-IPs, Multi-Perspective-Validation). Der
|
|
Normalzustand der Umgebung (443 auf eigene IP beschränkt) lässt die Erneuerung
|
|
**still** scheitern → Self-Signed-Default-Cert. IPv6-Pfad ist geprüft frei
|
|
(`::/0` separat in der Hetzner-Firewall-Regel; `0.0.0.0/0` deckt IPv6 NICHT ab) —
|
|
die September-Erneuerung ist aber der **erste** Lauf, der IPv6 überhaupt versucht.
|
|
|
|
**Entscheidung nötig:**
|
|
- **A — Ports offen lassen** bzw. zur Erneuerung öffnen (Kalendereintrag Mitte
|
|
September, nicht aufs Ablaufdatum!)
|
|
- **B — auf DNS-01 umstellen (empfohlen):** TXT-Validierung, kein offener Port,
|
|
ermöglicht Wildcards. Braucht IONOS-API-Token als Traefik-Secret; Voraussetzung
|
|
(versionierter Traefik-Stack) ist seit CFGMON-02 erfüllt.
|
|
|
|
Quelle: [hosts/cfgmon.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md)
|
|
|
|
---
|
|
*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).*
|
|
|
|
## Plan (2026-08-14) — eingeplant
|
|
|
|
**Weg B (DNS-01)** umsetzen — im Issue bereits als empfohlen markiert: entfernt die
|
|
Port-Fenster-Abhängigkeit komplett (kein offener 443, keine Unsicherheit beim IPv6-Erstlauf)
|
|
und ermöglicht Wildcards; die Voraussetzung (versionierter Traefik-Stack) ist seit CFGMON-02
|
|
erfüllt. Ausführung terminlich **vor Mitte September** (Puffer vor Ablauf 2026-10-28).
|
|
|
|
Schritte (B):
|
|
1. IONOS-API-Token als Traefik-Secret hinterlegen (SOPS-verschlüsselt).
|
|
2. Traefik-ACME-Resolver auf **DNS-01 (IONOS-Provider)** umstellen, committen → ausrollen.
|
|
3. Test-Erneuerung erzwingen; TXT-Record-Setzung + ausgestelltes Cert für `selendis`/`rohana`
|
|
prüfen (kein Self-Signed-Fallback).
|
|
4. Erst nach erfolgreichem DNS-01-Cert die verbliebene 443-Ausnahme schließen.
|
|
|
|
**Fallback A (Ports öffnen)** — nur falls B verworfen wird: **Kalender-Checkpoint Mitte
|
|
September** (NICHT aufs Ablaufdatum warten). 443 für `0.0.0.0/0` **und** `::/0` öffnen
|
|
(IPv6 separat!), Erneuerung + IPv6-Erstlauf beobachten, danach wieder schließen.
|
|
|
|
## In Arbeit (2026-08-14) — Weg B vorbereitet
|
|
|
|
Der Traefik-Stack liegt in `axion1337.chat/thread-net-git` (Compose, Deploy **manuell** auf
|
|
CFGMON: `cd /opt/thread-net-git && docker compose up -d`; kein Runner mehr). Der DNS-01-Umbau
|
|
ist als Diff fertig (lokal geprüft, noch **nicht** gepusht — gekoppelt an Token + Deploy):
|
|
|
|
- `reverse-proxy`-Command: `acme.tlschallenge` → `acme.dnschallenge` + `provider=ionos` +
|
|
`resolvers=1.1.1.1:53,8.8.8.8:53` (CFGMON ist öffentlich, keine Lab-Port-53-Interception).
|
|
- `environment: IONOS_API_KEY=${IONOS_API_KEY}` — Token aus `/opt/thread-net-git/.env`
|
|
(git-ignoriert), Format `<prefix>.<secret>` (IONOS Developer DNS-API).
|
|
- `acme.json` (letsencrypt-Volume) bleibt — bestehende Certs gelten bis 2026-10-28, Erneuerung
|
|
läuft dann über DNS-01. Volume NICHT löschen.
|
|
|
|
**Zwei menschliche Abhängigkeiten (blockieren den Abschluss):**
|
|
1. **IONOS Developer DNS-API-Key** anlegen (der `<prefix>.<secret>` gehört in die Host-`.env`).
|
|
2. **Deploy + Verifikation auf CFGMON** (kein SSH-Zugang von hier): `.env` setzen →
|
|
`docker compose up -d reverse-proxy` → Test-Erneuerung erzwingen → TXT + neues Cert prüfen.
|
|
|
|
Danach: 443-Weltöffnung ist für ACME nicht mehr nötig (nur noch für die Dienste selbst).
|
|
|
|
## Erledigt 2026-08-14 — Weg B (DNS-01) live & verifiziert
|
|
|
|
Umgestellt und end-to-end bestätigt. Der IONOS-DNS-API-Key liegt in der Host-`.env`
|
|
(`/opt/thread-net-git/.env`, git-ignoriert); die Compose-Umstellung ist git.lab-Commit
|
|
`8d089e2` (`thread-net-git`), auf CFGMON deployt.
|
|
|
|
- **Testausstellung** (Wegwerf-Router `dns01-test.axion1337.de`): DNS-01 gelöst, TXT via
|
|
IONOS-API gesetzt, `The server validated our request` 15:33:04 → Zertifikat 15:33:07.
|
|
- **Live geprüft**: `openssl s_client` (SNI `dns01-test`) → Issuer **Let's Encrypt (YR1)**,
|
|
gültig bis **2026-11-12** — echtes LE-Cert über DNS-01.
|
|
- **Produktiv-Resolver** `letsencrypt` steht auf `dnschallenge=true, provider=ionos` und
|
|
erneuert damit auch `rohana`/`selendis` → die September-Erneuerung braucht **kein offenes
|
|
Port 443** mehr; Zeitkritikalität ab 2026-09-28 entfällt.
|
|
- Test-Container entfernt; git.lab-Tracker-Issue 7 geschlossen (Parallel-Session).
|
|
|
|
**Rest-Hinweis:** Die September-Erneuerung ist der erste *unbeaufsichtigte* DNS-01-Lauf für
|
|
die Bestandszertifikate. Nach dem heutigen Test spricht nichts dagegen; wer ganz sichergehen
|
|
will, wirft Mitte September einmal kurz einen Blick ins Traefik-Log.
|