Dies ist eine alte Version des Dokuments!
letsencrypt
letsencrypt bietet die Möglichkeit kostenlos 3-Monate gültige SSL/TLS-Zertifikate zu beziehen.
Es existieren mehrere Clients, die unterschiedliche Methoden und Automatisierungsgrade unterstützen.
Comparison of 10 ACME / Let's Encrypt Clients
offizieller Client (certbot): Die offizielle Client-Software muss direkt auf dem Server gestartet werden (funktioniert also nicht für shared-Hosting sondern nur bei vhosts/root-Servern mit shell-Zugang) und unterstützt. Im standalone-Modus muss der laufende Webserver angehalten werden, es existieren jedoch integrierte Modi für Webserver wie Apache.
Eine detaillierte Liste für alle verbreiteten Plattformen führt die eff auf.
Installation
Da letsencrypt hat die Methode TLS-SNI-01 entfernt, daher ist nun mindestens certbot –version >= 0.28 nötig.
Debian 10 + 11
apt install certbot python3-certbot-apache python3-certbot-nginx
Der cronjob liegt in /etc/cron.d/certbot
.
generische Methode
Bei Debian sind in allen älteren stabilen Releases (vor Debian 9 / stretch) veraltete Versionen von certbot (bzw. als virtuelles Paket letsencrypt) in den Paketquellen enthalten. Daher ist die generische Methode via git zu verwenden.
apt install git git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt
Ubuntu / nginx
apt-get update apt-get install -y software-properties-common add-apt-repository universe add-apt-repository -y ppa:certbot/certbot apt-get update apt-get install -y python-certbot-nginx
Benutzung
letsencrypt aufrufen:
generisch:
./letsencrypt-auto certonly --rsa-key-size 3072 -d DOMAIN.tld -d www.DOMAIN.tld
bei Apache + standalone-Variante vorher Webserver stoppen:
letsencrypt certonly --pre-hook "systemctl stop apache2" --post-hook "systemctl start apache2" --rsa-key-size 3072 -d DOMAIN.tld -d www.DOMAIN.tld
Zertifikate verlinken
Zertifikate verlinken:
ln -s /etc/letsencrypt/live/DOMAIN/fullchain.pem letsencryptchain.pem ln -s /etc/letsencrypt/live/DOMAIN/cert.pem /etc/apache2/DOMAIN.crt ln -s /etc/letsencrypt/live/DOMAIN/privkey.pem /etc/apache2/DOMAIN.key
wildcard-Domains
Vorraussetzung ist ein v2 acme-Client 1), direkt per git:
aptitude install git git clone https://github.com/letsencrypt/letsencrypt
Client holt ein Zertifikat für *.DOMAIN.tld und DOMAIN.tld:
./letsencrypt/letsencrypt-auto certonly -d DOMAIN.tld -d *.DOMAIN.tld --manual --preferred-challenges dns
Zur Verifikation müssen zwei (!) DNS TXT-Records als _acme-challenge.DOMAIN.tld angelegt werden. Den Inhalt Inhalt legt der Client fest (hier ein Beispiel für „ApKINd5_XvyTvIqFXechXhbH7RebdR01hw5YhTxfQxd“)
Please deploy a DNS TXT record under the name _acme-challenge.DOMAIN.tld with the following value: ApKINd5_XvyTvIqFXechXhbH7RebdR01hw5YhTxfQxd Before continuing, verify the record is deployed. ------------------------------------------------------------------------------- Press Enter to Continue
automatische Verlängerung
Die Verlängerung lässt sich auch skripten. Dazu gibt es mehrere Varianten:
Der Befehl/das Skript sollte in /etc/crontab
(oder include-Datei / Benutzer-crontab) eingetragen werden.
[renewalparams] ... authenticator = standalone post_hook = systemctl start apache2 pre_hook = systemctl stop apache2
Apache
/etc/letsencrypt/renewal/$Domain.conf
# [...] authenticator = apache deploy_hook = systemctl restart apache2
Es können auch mehrere Befehle (Dienste) angegeben werden:
--pre-hook "service apache2 stop ; service postfix stop"
nginx
apt install python3-certbot-nginx
/etc/letsencrypt/renewal/$Domain.conf
# [...] authenticator = nginx deploy_hook = systemctl restart nginx
webroot
authenticator = webroot [[webroot_map]] $Domain = /var/www/default/html
cronjob
1x pro Woche:
12 4 * * 1 root certbot renew -q
Variante mit zufälliger Wartezeit: /etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
--server https://acme-v02.api.letsencrypt.org/directory