TLS Zertifikat mit LEGO
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