TLS Zertifikat mit LEGO: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
Zeile 43: Zeile 43:
     --http renew
     --http renew


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


   $ crontab -l
''~/.config/systemd/user/lego_certificate.service''
   # m h  dom mon dow   command
 
   HOME=/home/pacs/xyz00/users/mumble
   [Unit]
   MAILTO=webmaster@mumble.hs-example.de
  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
    
    
   # Renew mumble cert
   [Install]
   34 4 * * 2 $HOME/bin/lego-renew
  WantedBy=timers.target
 
Den Timer aktivieren und starten:
 
   $ systemctl --user enable lego_certificate.timer
  $ systemctl --user start lego_certificate.timer

Aktuelle Version vom 3. Dezember 2024, 12:38 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