Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt. ====== 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. [[https://www.metachris.com/2015/12/comparison-of-10-acme-lets-encrypt-clients/|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:Apache]]. Eine [[https://certbot.eff.org/all-instructions|detaillierte Liste für alle verbreiteten Plattformen führt die eff auf]]. ===== Installation ===== :!: Da letsencrypt hat die [[https://community.letsencrypt.org/t/how-to-stop-using-tls-sni-01-with-certbot/83210|Methode TLS-SNI-01 entfernt]], daher ist nun mindestens **certbot --version >= 0.28** nötig. ==== Debian 10 + 11 ==== <code bash>apt install certbot python3-certbot-apache python3-certbot-nginx</code> 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. <code bash> apt install git git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt </code> ==== Ubuntu / nginx ==== <code bash> 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 </code> ===== Benutzung ===== **letsencrypt aufrufen**: **generisch**: <code bash> certbot --rsa-key-size 3072 -d DOMAIN.tld -d www.DOMAIN.tld </code> ==== Hooks ==== Die wichtigsten hooks: * pre-hook + post_hooks (Befehle die vorher bzw. nachher laufen) * deploy_hooks (nach erfolgreicher Verlängerung z.B. zur Installation des Zertifikats) Verzeichnisse: /etc/letsencrypt/renewal-hooks/{pre,post,deploy} (z.B. /etc/letsencrypt/renewal-hooks/deploy/allservices.sh) Beispiel: bei standalone-Variante Webserver lighttpd (der keine Integration hat) stoppen ((allerdings wäre hier die Methode webroot sinnvoller)): <code bash>certbot certonly --pre-hook "systemctl stop lighttpd" --post-hook "systemctl start lighttpd" --rsa-key-size 3072 -d DOMAIN.tld -d www.DOMAIN.tld </code> Es können auch mehrere Befehle (innerhalb eines hooks) angegeben werden: <code>--pre-hook "service apache2 stop ; service postfix stop"</code> https://eff-certbot.readthedocs.io/en/stable/using.html#renewing-certificates ==== Zertifikate verlinken ==== **Zertifikate verlinken:** <code bash> 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 </code> **[[apache:ssl|Apache SSL config]]** ===== wildcard-Domains ===== Vorraussetzung ist ein v2 acme-Client ((das ist mittlerweile standard, ansonsten explizit angegeben <code bash>--server https://acme-v02.api.letsencrypt.org/directory</code>)), direkt per git: <code bash> aptitude install git git clone https://github.com/letsencrypt/letsencrypt </code> Client holt ein Zertifikat für *.DOMAIN.tld und DOMAIN.tld: <code bash>./letsencrypt/letsencrypt-auto certonly -d DOMAIN.tld -d *.DOMAIN.tld --manual --preferred-challenges dns</code> Zur Verifikation müssen **zwei** (!) **[[netzwerke:DNS]] TXT-Records** als _acme-challenge.DOMAIN.tld angelegt werden. Den Inhalt Inhalt legt der Client fest (hier ein Beispiel für "ApKINd5_XvyTvIqFXechXhbH7RebdR01hw5YhTxfQxd") <file> 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 </file> ===== 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. <file> [renewalparams] ... authenticator = standalone post_hook = systemctl start apache2 pre_hook = systemctl stop apache2 </file> ===== Integrationen ===== ==== Apache ==== <code bash>apt install python3-certbot-apache</code> <code bash>certbot certonly --apache --deploy-hook "systemctl restart apache2" -d $Domain</code> /etc/letsencrypt/renewal/$Domain.conf <file> # [...] authenticator = apache deploy_hook = systemctl restart apache2 </file> ==== nginx ==== <code bash>apt install python3-certbot-nginx</code> <code bash>certbot certonly --nginx --deploy-hook "systemctl restart nginx" -d $Domain</code> /etc/letsencrypt/renewal/$Domain.conf <file> # [...] authenticator = nginx deploy_hook = systemctl restart nginx </file> ==== webroot ==== <file> authenticator = webroot [[webroot_map]] $Domain = /var/www/default/html </file> ==== cronjob ==== 1x pro Woche: <file> 12 4 * * 1 root certbot renew -q </file> Variante mit zufälliger Wartezeit: ''/etc/cron.d/certbot'' <file> 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew </file> ==== deploy_hooks reparieren (mit ansible) ==== Die Verlängerung der Zertifikate funktioniert aber der Service der sie benutzt wird oft nicht vor Ablauf des Zertifikats neu gestartet? Dafür sind die hooks da, inbesondere der deploy_hook. Falls diese fehlen korrigiert das folgende playbook die deploy_hook (und optional noch die pre_hook or post_hook): [[https://gist.github.com/stefanux/11955353ea4f8002b73e433cbb5dc72e|gist]]: <html><script src="https://gist.github.com/stefanux/11955353ea4f8002b73e433cbb5dc72e.js"></script></html>