TLS Zertifikat mit LEGO: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 25: Zeile 25:
           --http run
           --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.
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:
Die Daten des Zertifikates kann man wie folgt auslesen:
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