Let's Encrypt mit Cloudflare DNS-Challenge

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Let's Encrypt mit Cloudflare DNS-Challenge

Zertifikat per DNS-01 über die Cloudflare-API. Kein offener Port, kein Webserver nötig – Wildcard-Zertifikate möglich.

Voraussetzungen

  • Domain wird bei Cloudflare verwaltet (Nameserver zeigen auf Cloudflare)
  • Scoped API-Token (nicht den globalen API-Key verwenden)

Plugin installieren

certbot Cloudflare-Plugin (Debian/Ubuntu)
apt install python3-certbot-dns-cloudflare

API-Token bei Cloudflare anlegen

My Profile → API Tokens → Create Token

Permissions:

  • Zone : DNS : Edit
  • Zone : Zone : Read

Unter Zone Resources auf die konkrete Zone einschränken.

Credentials-Datei

Token hinterlegen
vim /etc/letsencrypt/cloudflare.ini
dns_cloudflare_api_token = 2XX_DEIN_TOKEN
Rechte setzen (sonst meckert certbot)
chmod 600 /etc/letsencrypt/cloudflare.ini

Zertifikat anfordern

Einzeldomain + Wildcard
certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d 2XX.de -d '*.2XX.de'

Das Plugin setzt automatisch den TXT-Record _acme-challenge, wartet auf die Propagation und entfernt ihn danach wieder.

Stolpersteine

Träges DNS – Wartezeit erhöhen (Default 10s)
--dns-cloudflare-propagation-seconds 30
Proxy-Status (orange Wolke)

Stört die DNS-Validierung nicht – der TXT-Record wird trotzdem aufgelöst. Nur bei der HTTP-Challenge wäre die Wolke ein Problem.

Renewal

Erneuerung läuft automatisch über den certbot-Timer. Die Credentials sind in der renewal-conf hinterlegt, daher kein erneutes Eingreifen nötig.

Test ohne echtes Erneuern
certbot renew --dry-run

Deploy-Hook (optional)

Dienst nach Erneuerung neu laden
certbot certonly ... --deploy-hook "systemctl reload nginx"

Zertifikate liegen unter:

/etc/letsencrypt/live/2XX.de/fullchain.pem
/etc/letsencrypt/live/2XX.de/privkey.pem