Einrichtung kostenloser SSL-Zertifikate von
https://letsencrypt.org/ für den Webserver apache2.
Auswahl des ACME-Clients
Für automatisierte "Let's Encrypt"-Zertifikate braucht man einen ACME-Client. Der standardmäßig vorgeschlagene Certbot-Client hat allerdings gewisse Nachteile:
- Er ist primär für die automatische Verwendung gedacht und die manuelle Nutzung ist unnötig aufwendig
- Er setzt eine Python-Installation voraus, was aus Sicherheitsgründen nicht immer sinnvoll ist
Es gibt zwei wesentliche Alternativen:
- acme.sh - Kompatibel zu bash, dash und sh, liegt jedoch nicht als Debian-Paket vor (Stichwort Sicherheitspatches)
- dehydrated - Kompatibel zu bash und zsh, liegt ab Debian 9 als Paket vor
Und die Wahl ist gefallen auf: dehydrated, wegen Debian-Sicherheits-Support und einfacherer Installation
Installation
apt-get install dehydrated
Hilfreiche Anleitung:
https://github.com/mailcow/mailcow/wiki/Installing-Let%27s-Encrypt-ACME-client-Dehydrated
Konfiguration Dehydrated
Datei /etc/dehydrated/config anpassen, z.B. so:
CONFIG_D=/etc/dehydrated/conf.d
BASEDIR=/var/lib/dehydrated
WELLKNOWN="${BASEDIR}/acme-challenges"
DOMAINS_TXT="/etc/dehydrated/domains.txt"
# Produktiv
CA="https://acme-v01.api.letsencrypt.org/directory"
# Test
#CA="https://acme-staging.api.letsencrypt.org/directory"
CHALLENGETYPE="http-01"
PRIVATE_KEY_RENEW="no"
CONTACT_EMAIL=user@domain.tld
IP_VERSION=4
Datei /etc/dehydrated/domains.txt anlegen und in jede Zeile eine Domain eintragen, für die ein Zertifikat erstellt werden soll, z.B. so:
einexperte.de
stadtlandfrucht.de
Konfiguration Apache
Eine Datei /etc/apache2/conf-available/dehydrated.conf mit folgendem Inhalt erstellen
# Letsencrypt / dehydrated
# Neue Lösung:
<If "%{HTTP_HOST} != 'acme.irgitsch.de'">
RedirectMatch "^/.well-known/(.*)$" "http://acme.irgitsch.de/.well-known/$1"
</If>
# Alte Lösung:
# Globaler Alias wird in VirtualHost-Sektionen nicht ordentlich berücksichtig,
# warum ist nach Lektüre der Dokumentation unklar
#Alias /.well-known/acme-challenge /var/lib/dehydrated/acme-challenges
#<Directory /var/lib/dehydrated/acme-challenges>
# Options None
# AllowOverride None
# Require all granted
#</Directory>
Und aktivieren:
a2enconf dehydrated
systemctl reload apache2
Damit lässt sich dehydrated für alle Domains dieses Servers nutzen, jetzt muss es nur noch ausgeführt werden:
/usr/bin/dehydrated -c
Konfiguration der Domains
Im Anschluss müssen natürlich noch die SSL-Konfigurationen auf die Zertifikatspfade angepasst werden, z.B. in /etc/apache2/sites-enabled/einexperte.de-ssl.conf:
# Let'sEncrypt Zertifikate
SSLCertificateFile /var/lib/dehydrated/certs/einexperte.de/fullchain.pem
SSLCertificateKeyFile /var/lib/dehydrated/certs/einexperte.de/privkey.pem
Konfiguration Cron
Da die letsencrypt-Zertifikate nach 90 Tage verfallen ist es sinnvoll, diesen Befehl einmal wöchtenlich durch cron ausführen zu lassen.
Außerdem muss die Konfiguration des (Apache-) Webservers neu geladen werden, damit die neuen Zertifikate auch verwendet werden (die Zertifikate werden einmalig beim Start des Webservers aus den Dateien geladen und nicht zur Laufzeit).
Beispieleinträge für die Crontab:
20 1 * * 1 root /usr/bin/dehydrated -c
25 1 * * 1 root /usr/sbin/apache2ctl restart