TLS Zertifikat mit LEGO: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
Zeile 29: Zeile 29:


Die Daten des Zertifikates kann man wie folgt auslesen:
Die Daten des Zertifikates kann man wie folgt auslesen:
 
<syntaxhighlight lang=shell line>
  openssl x509 -in .lego/certificates/mumble.hs-example.de.crt -noout -text
openssl x509 -in .lego/certificates/mumble.hs-example.de.crt -noout -text
</syntaxhighlight>


== regelmäßige Verlängerung ==
== regelmäßige Verlängerung ==

Version vom 9. Dezember 2024, 14:27 Uhr

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