← Zurück zum Blog

Certbot mit DNS-Challenge auf Netcup – Zertifikate ohne Caddy

Certbot mit DNS-Challenge auf Netcup – Zertifikate ohne Caddy

Seit ich auf NetBird umgestellt habe, gibt es keinen Caddy mehr, aus dem ich mir Zertifikate kopieren könnte. Früher war das einfach: Caddy holt sich ein Let's Encrypt-Zertifikat, ich kopiere die Dateien in den Zielcontainer, fertig. Die Zertifikate aus dem in Netbird integrierten Traefik herauszufummeln ist möglich, aber umständlich.

Jetzt brauchen also Dienste wie Mailserver ihre eigenen Zertifikate. Und da kein HTTP-Port nach außen steht, kommt nur die DNS-Challenge in Frage. Certbot löst das über einen TXT-Eintrag in der DNS-Zone, aber das ist erschreckend unintuitiv mit Debian und Netcup.

Warum DNS-Challenge?

Die HTTP-Challenge braucht einen öffentlichen Port 80. Im NetBird-Mesh gibt es den nicht. Die DNS-Challenge braucht nur Zugriff auf die DNS-Zone – der Server muss nicht von außen erreichbar sein.

Challenge Voraussetzung Nachteil
HTTP Port 80 öffentlich Nicht im Mesh nutzbar
DNS API-Zugang zur Zone Plugin muss nachgerüstet werden

certbot-dns-netcup

Es gibt ein Plugin certbot-dns-netcup – aber es ist **nicht im Debian-Repository**. Es muss per pip in einer virtuellen Python- Umgebung installiert werden. Das ist der Hauptgrund, warum die Einrichtung sich umständlicher als nötig anfühlte.

Voraussetzungen

  • Debian 13 (Trixie)
  • Python 3 + pip + venv
  • Netcup-Account mit DNS-Zone
  • API-Key und API-Password aus dem Netcup-Kundenpanel

Schritt 1: Virtuelle Umgebung anlegen

Certbot darf nicht systemweit mit pip installiert werden – das würde mit apt-Paketen kollisieren. Deshalb eine venv:

python3 -m venv /opt/certbot-venv
/opt/certbot-venv/bin/pip install certbot certbot-dns-netcup

Certbot und das Netcup-Plugin zusammen installiert. Der Pfad zum Binary ist jetzt /opt/certbot-venv/bin/certbot.

Schritt 2: Netcup-API-Zugang einrichten

Im Netcup-Kundenpanel unter Meine Daten → API findest du:

  • API-Key (kryptischer String)
  • API-Password (selbst gewählt)
  • Customer-ID (deine Netcup-Kundennummer)

Diese Werte speicherst du sicher auf dem Server:

mkdir -p /etc/letsencrypt
cat > /etc/letsencrypt/netcup.ini << 'EOF'
dns_netcup_api_key = dein-api-key
dns_netcup_api_password = dein-api-password
dns_netcup_customer_id = deine-kundennummer
EOF

chmod 600 /etc/letsencrypt/netcup.ini

Schritt 3: Zertifikat anfordern

/opt/certbot-venv/bin/certbot certonly \
  --dns-netcup \
  --dns-netcup-credentials /etc/letsencrypt/netcup.ini \
  -d mail.frischux.de

Certbot ruft die Netcup-API auf, setzt den TXT-Eintrag, wartet auf Validierung, und entfernt den Eintrag wieder. Alles automatisch.

Für mehrere Domains:

/opt/certbot-venv/bin/certbot certonly \
  --dns-netcup \
  --dns-netcup-credentials /etc/letsencrypt/netcup.ini \
  -d mail.frischux.de \
  -d smtp.frischux.de \
  -d imap.frischux.de

Schritt 4: Auto-Renew

Certbot hat einen integrierten Renew-Timer. Aber der muss auf die venv zeigen:

cat > /etc/systemd/system/certbot-renew.service << 'EOF'
[Unit]
Description=Certbot Renew
After=network-online.target

[Service]
Type=oneshot
ExecStart=/opt/certbot-venv/bin/certbot renew --quiet
EOF

cat > /etc/systemd/system/certbot-renew.timer << 'EOF'
[Unit]
Description=Run Certbot renew twice daily

[Timer]
OnCalendar=*-*-* 03,15:00:00
RandomizedDelaySec=3600
Persistent=true

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable --now certbot-renew.timer

Das Renew nutzt dieselben Credentials – das netcup.ini muss nicht nochmal angefasst werden.

Schritt 5: Zertifikate einbinden

Die Zertifikate landen unter /etc/letsencrypt/live/mail.frischux.de/:

cert.pem       – Zertifikat ( intermediäres CA included)
chain.pem      – CA-Kette
fullchain.pem  – Zertifikat + CA-Kette (für die meisten Dienste)
privkey.pem    – privater Schlüssel

Für den Mailserver reicht meist fullchain.pem + privkey.pem.

Was mich gestört hat

Die Einrichtung ist nicht kompliziert, aber sie ist **umständlicher als nötig**. Bei Cloudflare oder Hetzner gibt es apt-installierbare Plugins. Netcup ist da in der Steinzeit:

  • Kein Paket in Debian
  • pip-Installation in venv nötig
  • Kein systemd-Service mitgeliefert
  • Documentation spärlich

Aber es funktioniert. Man muss es einmal aufgesetzt haben, danach läuft es automatisch.

Fazit

DNS-Challenge mit Netcup ist machbar, aber der Weg über pip und venv ist nicht der eleganteste. Wer kann, sollte seinen DNS bei einem Anbieter hosten, der ein apt-Paket bietet. Wer bei Netcup bleibt, findet hier den Weg, der es tut.

Der erste Aufwand ist lästig. Danach läuft es automatisch – Certbot holt sich alle 90 Tage ein neues Zertifikat, die TXT-Einträge werden gesetzt und wieder gelöscht, ohne Zutun.