TLS Zertifikat mit LEGO: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
Zeile 37: Zeile 37:
Für die automatische Verlängerung des Zertifikats können wir einen Cronjob aufsetzen, der zum Beispiel täglich oder wöchentlich läuft:
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  
<syntaxhighlight lang=shell line>
  #!/bin/bash
$ cat bin/lego-renew  
  HOME=/home/pacs/xyz00/users/mumble
#!/bin/bash
  /usr/bin/lego -d mumble.hs-example.de  -a \
HOME=/home/pacs/xyz00/users/mumble
    --email webmaster@mumble.hs-example.de -k ec256 \
/usr/bin/lego -d mumble.hs-example.de  -a \
    --http.webroot $HOME/doms/mumble.hs-example.de/htdocs \
  --email webmaster@mumble.hs-example.de -k ec256 \
    --http renew
  --http.webroot $HOME/doms/mumble.hs-example.de/htdocs \
  --http renew
</syntaxhighlight>


Die Ausführung des Skriptes wird über einen systemd timer gesteuert:
Die Ausführung des Skriptes wird über einen systemd timer gesteuert:
Zeile 49: Zeile 51:
''~/.config/systemd/user/lego_certificate.service''
''~/.config/systemd/user/lego_certificate.service''


  [Unit]
<syntaxhighlight lang=ini line>
  Description=renew lego certificate
[Unit]
   
Description=renew lego certificate
  [Service]
 
  Type=oneshot
[Service]
  ExecStart=php8.2 /home/pacs/xyz00/users/mumble/bin/lego-renew
Type=oneshot
ExecStart=php8.2 /home/pacs/xyz00/users/mumble/bin/lego-renew
</syntaxhighlight>


''~/.config/systemd/user/lego_certificate.timer''
''~/.config/systemd/user/lego_certificate.timer''


  [Unit]
<syntaxhighlight lang=ini line>
  Description=timer for lego certificate
[Unit]
 
Description=timer for lego certificate
  [Timer]
 
  OnCalendar=Thu 4:34
[Timer]
  Persistent=True
OnCalendar=Thu 4:34
 
Persistent=True
  [Install]
 
  WantedBy=timers.target
[Install]
WantedBy=timers.target
</syntaxhighlight>


Den Timer aktivieren und starten:
Den Timer aktivieren und starten:


  $ systemctl --user enable lego_certificate.timer
<syntaxhighlight lang=shell>
  $ systemctl --user start lego_certificate.timer
systemctl --user enable lego_certificate.timer
systemctl --user start lego_certificate.timer
</syntaxhighlight>

Version vom 9. Dezember 2024, 14:28 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