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
Letzte ÜberarbeitungBeide Seiten der Revision
software:letsencrypt [2018/04/23 18:00] – [wildcard-Domains] stsoftware:letsencrypt [2022/03/16 22:06] – [Benutzung] 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)
 +
 +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>
 +
 +==== 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>