Markus Michalski FAQ

Server Tools: SSL-Zertifikate

Let's-Encrypt-Zertifikate mit Server Tools: Erstellen per certbot für Apache, Wildcard über DNS-Challenge, Löschen, Auflisten, Ablauf prüfen, täglicher Erneuerungs-Cronjob und alle Einschränkungen.

English Version

Zurück zur Übersicht


SSL-Zertifikate

Die SSL-Verwaltung nutzt certbot mit dem Apache-Plugin.

ssl create, ssl delete und ssl renew laufen nur mit ST_WEBSERVER=apache. Mit nginx brechen sie mit ... only supports Apache ... Nginx SSL support is not yet implemented ab. ssl wildcard prüft das Webserver-Backend nicht und läuft mit beiden Backends, es braucht aber einen konfigurierten DNS-Provider. ssl list und ssl check lesen nur certbot bzw. /etc/letsencrypt und funktionieren ebenfalls mit beiden Backends.

Zertifikat erstellen

server-tools ssl create --domain example.com
server-tools ssl create --domain example.com --email admin@example.com

Ablauf:

  1. Die Domain wird geprüft. Für sie muss ein Apache-VHost <domain>.conf existieren, sonst bricht der Befehl ab.
  2. Ist certbot nicht installiert, installiert das Tool per apt-get die Pakete certbot und python3-certbot-apache.
  3. Die E-Mail-Adresse wird in dieser Reihenfolge bestimmt: --email, ST_CERTBOT_EMAIL, webmaster@<domain>. Ist die Adresse ungültig, nimmt das Tool mit einer Warnung webmaster@<domain>.
  4. certbot --apache -d <domain> --non-interactive --agree-tos --email <adresse>.
  5. Bei Proxy-VHosts stellt das Tool in der erzeugten <domain>-le-ssl.conf die Ziele https://localhost, https://127.0.0.1 und https://[::1] in ProxyPass und ProxyPassReverse wieder auf http:// zurück, weil das Backend meist kein TLS spricht.
  6. Apache wird neu geladen.

Das Zertifikat gilt nur für die angegebene Domain. Aliase des VHosts sind nicht enthalten.

Wildcard-Zertifikat

server-tools ssl wildcard --domain example.com --provider cloudflare

Voraussetzungen und Ablauf:

  1. Der Provider kommt aus --provider oder ST_DNS_PROVIDER. Unterstützt: cloudflare, digitalocean, route53, google, linode, ovh.
  2. Fehlt das Paket python3-certbot-dns-<provider>, wird es per apt-get installiert.
  3. Die Datei mit den API-Zugangsdaten muss existieren: ST_DNS_CREDENTIALS_FILE oder /root/.certbot-dns-<provider>.ini. Fehlt sie, zeigt das Tool für cloudflare und digitalocean ein Beispiel für den Inhalt.
  4. certbot certonly --dns-<provider> --dns-<provider>-credentials <datei> -d <domain> -d *.<domain> --non-interactive --agree-tos, mit ST_CERTBOT_EMAIL oder webmaster@<domain>.

Für Wildcard-Zertifikate gibt es keine --email-Option. Das Tool legt kein VHost-SSL an und ändert keine Apache-Konfiguration. Das Zertifikat musst du selbst in einen VHost einbinden.

Zertifikat löschen

server-tools ssl delete --domain example.com

Das Zertifikat unter /etc/letsencrypt/live/<domain> muss existieren. Nach der Rückfrage ruft das Tool certbot delete --cert-name <domain> auf, entfernt /etc/apache2/sites-available/<domain>-le-ssl.conf und lädt Apache neu. Die Datei <domain>.conf bleibt unberührt.

Auflisten und Ablauf prüfen

server-tools ssl list
server-tools ssl check --days 14

list gibt certbot certificates aus. check liest alle Zertifikate in /etc/letsencrypt/live/ und zeigt die, die in höchstens --days Tagen (Standard 30) ablaufen, als <domain>: expires in <n> days. Bereits abgelaufene Zertifikate erscheinen mit negativer Tageszahl.

Automatische Erneuerung einrichten

server-tools ssl renew

Der Befehl erneuert nicht selbst, sondern richtet die Erneuerung ein:

Datei Inhalt
/usr/local/bin/ssl-renewal.sh Ruft certbot renew --quiet --no-self-upgrade --apache auf, lädt danach apache2 neu und schreibt nach /var/log/ssl-renewal.log
/etc/cron.d/ssl-renewal 30 3 * * * root /usr/local/bin/ssl-renewal.sh, täglich um 03:30 Uhr

Vorhandene Dateien werden ohne Rückfrage überschrieben. Zum Testen:

sudo certbot renew --dry-run

Alle Zertifikate neu erstellen (nur Menü)

Das Menü bietet "Recreate all certificates (Apache mode)". Das Tool sucht alle Zertifikate in /etc/letsencrypt/live/, für die ein Apache-VHost existiert, und fragt nach All certificates will be deleted and recreated!. Danach werden für jede Domain die SSL-Site und <domain>-le-ssl.conf entfernt, Apache neu geladen, alle Zertifikate gelöscht und per certbot --apache neu angefordert. Am Ende steht Results: <erfolg>/<gesamt> successful.

Während des Vorgangs sind die Domains ohne HTTPS erreichbar. Schlägt die Neuanforderung einer Domain fehl, bleibt sie ohne Zertifikat.

Weiter