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.
SSL-Zertifikate
Die SSL-Verwaltung nutzt certbot mit dem Apache-Plugin.
ssl create,ssl deleteundssl renewlaufen nur mitST_WEBSERVER=apache. Mitnginxbrechen sie mit... only supports Apache ... Nginx SSL support is not yet implementedab.ssl wildcardprüft das Webserver-Backend nicht und läuft mit beiden Backends, es braucht aber einen konfigurierten DNS-Provider.ssl listundssl checklesen nur certbot bzw./etc/letsencryptund 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:
- Die Domain wird geprüft. Für sie muss ein Apache-VHost
<domain>.confexistieren, sonst bricht der Befehl ab. - Ist certbot nicht installiert, installiert das Tool per
apt-getdie Paketecertbotundpython3-certbot-apache. - 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 Warnungwebmaster@<domain>. certbot --apache -d <domain> --non-interactive --agree-tos --email <adresse>.- Bei Proxy-VHosts stellt das Tool in der erzeugten
<domain>-le-ssl.confdie Zielehttps://localhost,https://127.0.0.1undhttps://[::1]inProxyPassundProxyPassReversewieder aufhttp://zurück, weil das Backend meist kein TLS spricht. - 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:
- Der Provider kommt aus
--provideroderST_DNS_PROVIDER. Unterstützt:cloudflare,digitalocean,route53,google,linode,ovh. - Fehlt das Paket
python3-certbot-dns-<provider>, wird es perapt-getinstalliert. - Die Datei mit den API-Zugangsdaten muss existieren:
ST_DNS_CREDENTIALS_FILEoder/root/.certbot-dns-<provider>.ini. Fehlt sie, zeigt das Tool fürcloudflareunddigitaloceanein Beispiel für den Inhalt. certbot certonly --dns-<provider> --dns-<provider>-credentials <datei> -d <domain> -d *.<domain> --non-interactive --agree-tos, mitST_CERTBOT_EMAILoderwebmaster@<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.