TLS Zertifikat mit LEGO

Aus Hostsharing Wiki
Version vom 3. Dezember 2024, 12:38 Uhr von Cds09 (Diskussion | Beiträge) (→‎regelmäßige Verlängerung)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

TLS Zertifikat mit LEGO

Für den zentralen Apache Webserver werden bei Hostsharing automatisch TLS Zertifikate über den Dienst "Lets Encrypt" erzeugt und verlängert. Das wird über die Domain-Option "letsencrypt" gesteuert.

Teilweise will man aber eigene Serverdienste betreiben, die nicht über HTTP hinter dem Apache-Proxy erreichbar sind. Beispiele dafür sind ein eigener XMPP Server oder ein Mumble Server. Für diese Server können die Nutzer:innen der Hostsharing Plattform sehr leicht TLS Zertifikate erzeugen, indem sie den zentral installierten LEGO-Bot nutzen.

Einrichtung

Zunächst muss eine Domain vorhanden sein, auf die das Zertifikat ausgestellt werden soll und die im Webspace über HTTP erreichbar ist.

Ich nutze hier den Service-User "xyz00-mumble" als Beispiel. Bei diesem User sei die Domain "mumble.hs-example.de" aufgeschaltet.

Dann lösche ich bei der Domain die HTTP-Weiterleitungen und die www-Subdomain:

 rm -rf ~/doms/mumble.hs-example.de/subs/www \
          ~/doms/mumble.hs-example.de/subs-ssl/www \
          ~/doms/mumble.hs-example.de/htdocs/.htaccess \
          ~/doms/mumble.hs-example.de/htdocs-ssl/.htaccess 

Das erste Zertifikat wird mit dem folgenden Befehl erzeugt:

 /usr/bin/lego -d mumble.hs-example.de -a \
         --email webmaster@mumble.hs-example.de -k ec256 \
         --http.webroot $HOME/doms/mumble.hs-example.de/htdocs \
         --http run

Bei der erfolgreichen Ausführung diese Befehls wurde ein verstecktes Verzeichnis ".lego" angelegt. In diesem Verzeichnis befinden sich die Daten zum neu angelegten Letsencrypt-Account und das Zertifikat mit dem zugehörigen private key.

Die Daten des Zertifikates kann man wie folgt auslesen:

 openssl x509 -in .lego/certificates/mumble.hs-example.de.crt -noout -text

regelmäßige Verlängerung

Für die automatische Verlängerung des Zertifikats können wir einen Cronjob aufsetzen, der zum Beispiel täglich oder wöchentlich läuft:

 $ cat bin/lego-renew 
 #!/bin/bash
 HOME=/home/pacs/xyz00/users/mumble
 /usr/bin/lego -d mumble.hs-example.de  -a \
   --email webmaster@mumble.hs-example.de -k ec256 \
   --http.webroot $HOME/doms/mumble.hs-example.de/htdocs \
   --http renew

Die Ausführung des Skriptes wird über einen systemd timer gesteuert:

~/.config/systemd/user/lego_certificate.service

 [Unit]
 Description=renew lego certificate
   
 [Service]
 Type=oneshot
 ExecStart=php8.2 /home/pacs/xyz00/users/mumble/bin/lego-renew

~/.config/systemd/user/lego_certificate.timer

 [Unit]
 Description=timer for lego certificate
 
 [Timer]
 OnCalendar=Thu 4:34
 Persistent=True
 
 [Install]
 WantedBy=timers.target

Den Timer aktivieren und starten:

 $ systemctl --user enable lego_certificate.timer
 $ systemctl --user start lego_certificate.timer