Lets Encrypt Zertifikat via Certbot anfragen

Zertifikate können bequem mittels Certbot angefragt werden, wobei zwischen verschiedenen Verfahren gewählt werden kann. Eine Auflistung der Plugins findet man hier: https://certbot.eff.org/docs/using.html

Folgende Möglichkeiten werden hier erklärt:

  • Webroot
  • Standalone
  • DNS
  • Manual
Info

In den Beispielen werden die Variablen genutzt, die entsprechend ersetzt werden müssen!

Variable Inhalt
DOMAIN der Domain Name für den das Zertifikat generiert werden soll
EMAIL E-Mailadresse zu der kritische E-Mails, oder Ablauferinnerungen gesendet werden

Benötigt man ein Wildcard-Zertifikat (*.domain.de) ist die nur die Verifikation mittels DNS möglich!

Es können bis zu 100 Hostnamen auf ein gemeinsames Zertifikat gelegt werden, welche mittels mehreren “-d”-Parametern erfolgt:

certbot ... -d domain1.de -d my.host.com -d another.host.company.com

Installation

Für Ubuntu und Archlinux stehen Pakete bereit. Liefert das Betriebssystem diese nicht, ist eine Installation auch mittels PIP (Python Package Installer) möglich:

pacman -Syu certbot
apt update && apt install certbot

Webroot

Hierbei schreibt der Certbot eine ACME Challenge Datei in den gewünschten Pfad. Eine andere Anwendung (z.B. nginx) muss diese dann auf Anfrage der Let’s Encrypt Servern ausliefern können. Ist der Inhalt der Datei korrekt, erhält man sein Zertifikat.

certbot certonly -d ${DOMAIN} --non-interactive --agree-tos --email ${MAIL} --webroot /var/www/html/

Standalone (HTTP Port)

Der Certbot bindet sich hierbei an Port 80 und kann mittels HTTP angefragt werden. Der Port kann im Fall einer vorangehenden Belegung (z.B. durch einen Webserver) konfiguriert werden. Dadurch bedingt, dass Let’s Encrypt allerdings nur Port 80 zur Prüfung heranzieht, muss ein Proxy / Webserver dann auf den entsprechenden Port weiterleiten.

Läuft kein Webserver auf dem Host, kann die Standalone Methode mit Port 80 (Standard) genutzt werden.

# direkt, ohne Proxy (nur wenn Port 80 frei ist!)
certbot certonly --standalone -d ${DOMAIN} --non-interactive --agree-tos --email ${MAIL} --http-01-port=80

# Proxy lauscht auf :80, Certbot Port 9999
certbot certonly --standalone -d ${DOMAIN} --non-interactive --agree-tos --email ${MAIL} --http-01-port=9999

Manual

Alle Schritte der Zertifikatsgenerierung können durch individuelle Skripte durchgeführt werden. In diesem Beispiel legt das Skript le-dns-hook.sh den DNS Eintrag an und le-dns-hook-cleanup.sh räumt im Anschluss den Eintrag wieder ab.

Die zu verwendeten Daten (Hostname + ACME Challenge) werden an die Skripte beim Ausführen via Environment-Variablen übergeben, wie hier dokumentiert: https://certbot.eff.org/docs/using.html#pre-and-post-validation-hooks

letsencrypt certonly --manual --preferred-challenges dns \
  --manual-auth-hook "/usr/local/bin/le-dns-hook.sh" \
  --manual-cleanup-hook "/usr/local/bin/le-dns-hook-cleanup.sh" \
  -d ${DOMAIN}

https://certbot.eff.org/docs/using.html