software:letsencrypt

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:letsencrypt [2018/04/23 18:00] – [wildcard-Domains] stsoftware:letsencrypt [2023/08/11 10:24] (aktuell) – [Hooks] st
Zeile 1: Zeile 1:
 +====== 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>