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 betrieben, 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 ww-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 Cronjob gesteuert:
$ crontab -l # m h dom mon dow command HOME=/home/pacs/xyz00/users/mumble MAILTO=webmaster@mumble.hs-example.de # Renew mumble cert 34 4 * * 2 $HOME/bin/lego-renew