ACME / Auto-TLS
Wer Wildcard-Zertifikate (*.example.com) will, kommt am DNS-01-Challenge-Verfahren von Let's Encrypt nicht vorbei. Der PDNS Manager bringt dafür ein eigenes Token-System mit, das genau so viel kann wie nötig – nicht mehr.
Das Sicherheitsmodell
Ein ACME-Token hat den Prefix dnsmgr_acme_ und ist auf genau diese Operationen beschränkt:
- Schreibe einen TXT-Record namens
_acme-challenge.<domain>. - Lösche denselben TXT-Record nach erfolgreicher Validierung.
Es darf nur in den freigegebenen Zonen arbeiten (allowed_zones) und ausschließlich Records, deren Name auf _acme-challenge. beginnt. Selbst wenn ein Angreifer das Token bekommt, kann er keine A/MX/NS-Records anfassen, keine Zonen anlegen oder löschen, keine Settings ändern.
Token anlegen
Im Panel als Admin: Einstellungen → ACME-Tokens → Neues Token:
- Name – z. B. „cert-renewer-vm1".
- Erlaubte Zonen – Komma-Liste, longest-match.
example.comerlaubt sowohlexample.comals auchfoo.example.com. - Ablauf – optional ein Datum.
Nach dem Speichern wird das Token genau einmal im Klartext angezeigt – kopiere es sofort an die Stelle, wo es gebraucht wird (z. B. in /etc/dnsmgr.env auf dem Cert-Renewer-Host). In der DB liegt nur ein SHA-256-Hash; verlorene Tokens lassen sich also nicht wiederherstellen, sondern nur ersetzen.
Mit certbot nutzen
Im Repo liegt fertig scripts/certbot-dns-dnsmanager.sh. Vorbereitung auf dem Cert-Renewer-Host:
# Hook-Skript ablegen und ausführbar machen
sudo cp certbot-dns-dnsmanager.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/certbot-dns-dnsmanager.sh
# Token + URL hinterlegen
sudo install -m 600 /dev/stdin /etc/dnsmgr.env <<EOF
DNSMGR_URL=https://pdns.example.com
DNSMGR_TOKEN=dnsmgr_acme_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DNSMGR_PROPAGATE_SECONDS=30
EOF Zertifikat anfordern:
certbot certonly \
--manual --preferred-challenges dns \
--manual-auth-hook /usr/local/bin/certbot-dns-dnsmanager.sh \
--manual-cleanup-hook /usr/local/bin/certbot-dns-dnsmanager.sh \
-d "*.example.com" -d "example.com"
Was im Hook passiert: das Skript liest die certbot-Env-Variablen CERTBOT_DOMAIN und CERTBOT_VALIDATION, unterscheidet anhand von CERTBOT_AUTH_OUTPUT zwischen present und cleanup, und schickt das passende JSON an /api/v1/acme/present bzw. /api/v1/acme/cleanup.
Erneuerung automatisieren
Auf dem Renewer-Host einfach certbot renew in den System-Cron oder einen systemd-Timer hängen. Da die Hooks im Renewal-Config gespeichert werden, läuft alles ohne Eingriff.
Was im Audit-Log auftaucht
Jede ACME-Operation landet als eigene Audit-Zeile:
action=ACME_PRESENT resource=_acme-challenge.example.com user=acme:cert-renewer-vm1
action=ACME_CLEANUP resource=_acme-challenge.example.com user=acme:cert-renewer-vm1 So siehst du sofort, wenn ein Renewer hängt oder ein Token unerwartet aktiv wird.
Token rotieren
Im Panel das alte Token löschen, neues Token anlegen, neuen Wert in /etc/dnsmgr.env auf dem Cert-Host setzen, fertig. Die alten Zertifikate bleiben gültig – sie sind ja schon ausgestellt.