TLS Zertifikat mit LEGO: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
K (regelmäßige Verlängerung braucht sicher kein PHP)
 
Zeile 57: Zeile 57:
[Service]
[Service]
Type=oneshot
Type=oneshot
ExecStart=/home/pacs/xyz00/users/mumble/bin/lego-renew
ExecStart=%h/bin/lego-renew
</syntaxhighlight>
</syntaxhighlight>



Aktuelle Version vom 23. Dezember 2024, 12:41 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=%h/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