Benutzer:Drhirn: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Die Seite wurde geleert.)
Markierungen: Geleert Manuelle Zurücksetzung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[https://certbot.eff.org Certbot] ist ein freies Open-Source-Tool der Electronic Frontier Foundation (EFF) mit dem automatisiert Let's Encrypt Zertifikate erstellt werden können.


Diese Zertifikate können auch in FHEM verwendet werden, um den Netzwerkverkehr zu verschlüsseln.
In dieser Anleitung wird beschrieben wie [[#Certbot installieren|Certbot]] installiert, [[#Zertifikate erstellen|Zertifikate damit erstellt]] und diese dann [[#Einbindung in FHEM|FHEM zur Verfügung gestellt]] werden.
Let's Encrypt Zertifikate sind in der Regel 90 Tage gültig. Beim Beantragen eines Zertifikates wird von Certbot automatisch ein systemd Timer erstellt, der kurz vor Ablauf des Zertifikat einen Prozess zur Erneuerung desselben startet. Dabei müssen die selben Voraussetzungen gegeben sein, die auch bei der Erst-Erstellung des Zertifikates nötig sind.
==Certbot installieren==
;Voraussetzungen:
* Debian/Ubuntu/Raspberry Pi OS auf dem FHEM-Server
* SSH-Zugang zum FHEM-Server
Die empfohlene Installationsweise ist über die [https://snapcraft.io Snap Paketverwaltung]. Diese Anleitung geht von dieser Empfehlung aus. Wer Snap nicht verwenden möchte, findet [https://eff-certbot.readthedocs.io/en/latest/install.html hier] weitere Informationen.
Es werden zuerst die Paket-Quellen aktualisiert. Danach erfolgt die Installation der Snap Paketverwaltung und einer Laufzeitumgebung dafür:
sudo apt update
sudo apt install -y snapd
sudo snap install core
Im nächsten Schritt kann dann der Cerbot installiert werden:
sudo snap install --classic certbot
Damit Certbot ohne Angabe seines Pfades ausgeführt werden kann, wird noch ein symbolischer Link erstellt:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
==Zertifikate erstellen==
Certbot bietet mehrere Möglichkeiten, Let's Encrypt Zertifikate zu erstellen. Diese hängen von den jeweiligen technischen Voraussetzungen ab.
Damit ein Zertifikat ausgestellt werden kann, muss der Server bzw. der Serveradministrator bestimmte Aufgaben erfüllen um zu beweisen, dass er auch Besitzer der Domain ist, für die ein Zertifikat erstellt werden soll. Beispiele für solche Aufgaben sind z.B. einen bestimmten Record im DNS-Eintrag der Domain zu erstellen oder eine definierte Datei auf einem Webserver abzulegen. Für jede dieser Aufgaben gibt es ein Certbot Plug-In. Genauere Details finden sich auf der Webseite von [https://letsencrypt.org/de/how-it-works/ Let's Encrpyt].
Welche der Möglichkeiten bzw. welches Plug-In genutzt wird, entscheidet der Serveradministrator.
Im Folgenden sind zwei verschiedene Plug-Ins erklärt. Weitere Informationen oder alternative Möglichkeiten bietet die [https://eff-certbot.readthedocs.io/en/latest/using.html#getting-certificates-and-choosing-plugins Certbot-Dokumentation].
===Standalone-Plugin===
Die "standalone" Variante bietet sich an, wenn auf dem System kein Web-Server installiert ist oder mit diesem nicht interagiert werden soll/kann.
Um die Let's Encrypt Aufgabe erfüllen zu können, wird automatisch ein in Certbot eingebauter Webserver gestartet. Dieser liefert eine Datei aus, die von Let's Encrypt dann überprüft wird.
;Voraussetzungen:
* Einen DNS Eintrag vom Typ A (IPv4) oder AAAA (IPv6) für eure Domain mit eurer externen IP Adresse
* Port 80 ist auf der Firewall geöffnet und wird zum FHEM-Server weitergeleitet
* Port 80 wird auf dem FHEM-Server von keinem anderen Service (Web-Server z.B.) verwendet
Sind alle Voraussetzungen erfüllt, kann ein Zertifikat mit folgendem Befehl beantragt werden:
sudo certbot certonly --standalone -d www.example.com
*'''''--standalone''''' bestimmt hier das zu verwendende Plug-In "standalone"
*'''''-d''''' die Domain, für die das Zertifikat ausgestellt werden soll. Es können - kommagetrennt - mehrere Domains angegeben werden. Oder der Parameter -d wird einfach öfter verwendet.
Weiteres Beispiel für das Beantragen eines Zertifikates mit mehreren Domains:
sudo certbot certonly --standalone -d www.example.com -d example.com
Wer den ganzen Ablauf zuerst testen möchte, kann einen "dry-run" durchführen. Dabei wird die Ausstellung durch einen Test-Server von Let's Encrypt durchgeführt, es werden aber keine Zertifikate am FHEM-Server gespeichert:
sudo certbot certonly --standalone --dry-run -d www.example.com
Eine weitere Möglichkeit, einen ausführlicheren Testlauf durchzuführen ist, den Let's Encrypt Staging-Server (Test-Server) zu verwenden. Dabei werden Zertifikate im System abgelegt, die zwar ungültig sind, aber zu Testzwecken verwendet werden können:
sudo certbot certonly --standalone --staging -d www.example.com
<!--;Erneuern
sudo certbot certonly --standalone --force-renewal --staging -d test.jft.at-->
===DNS Plugins===
Eine ganz einfache Möglichkeit zur Erstellen von Zertifikaten bieten die DNS Plug-Ins.
Dabei muss kein lokaler Server aus dem Internet erreichbar sein, sondern es wird ein bestimmter DNS-Eintrag der Domain automatisch geändert und überprüft um zu beweisen, dass der Antragsteller Inhaber der Domain ist.
;Voraussetzungen
*Verwendung eines [https://eff-certbot.readthedocs.io/en/latest/using.html#dns-plugins unterstützten DNS-Providers] zur Verwaltung der eigenen Domain
*API-Key mit dem Recht, DNS-Einträge zu ändern
Für alle DNS Plug-Ins gilt, dass sie unter dem root-User laufen. Um das zu erlauben, ist folgender Befehl nötig:
sudo snap set certbot trust-plugin-with-root=ok
Anschließend muss das korrekte Plug-In installiert werden.
In dieser Anleitung wird die Verwendung des [https://certbot-dns-cloudflare.readthedocs.io/en/stable/ Cloudflare Plug-Ins] erklärt. Die Funktionsweise ist bei anderen ähnlich und auf der jeweiligen [https://eff-certbot.readthedocs.io/en/latest/using.html#dns-plugins Dokumentationsseite] des Plug-Ins ersichtlich.
Zuerst wird das Plug-In installiert:
sudo snap install certbot-dns-cloudflare
Danach wird eine Datei erstellt, die den API-Key mit der Berechtigung zum Ändern von DNS-Einträgen bei Cloudflare beinhaltet:
sudo mkdir /root/.secrets/
sudo nano /root/.secrets/cloudflare.ini
;/root/.secrets/cloudflare.ini
<syntaxhighlight lang="ini">
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567
</syntaxhighlight>
Diese Datei muss dann noch vor unbefugtem Zugriff geschützt werden:
sudo chmod 0700 /root/.secrets/
sudo chmod 0400 /root/.secrets/cloudflare.ini
Sind diese Schritte erledigt, kann ein Zertifikat beantragt werden:
<syntaxhighlight lang="bash">
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 20 \
  -d www.example.com -d example.com
</syntaxhighlight>
==Einbindung in FHEM==
Um die Zertifikate nun in FHEM nutzen zu können, müssen zuerst die Berechtigungen auf diese geändert und dann symbolische Links zu Pfaden erstellt werden, wie sie FHEM erwartet.
Das Ändern der Berechtigungen ist wichtig, weil der User ''fhem'' sonst keinen Lesezugriff auf diese hätte. Das Erstellen der symbolischen Link, weil FHEM die Zertifikate im Ordner ''/opt/fhem/certs'' erwartet.
Grundsätzlich legt Certbot alle Zertifikate unter ''/etc/letsencrypt/archive'' ab. Und zwar unterschiedliche Versionen der Zertifikate. Damit Anwendungen die jeweils aktuellen Zertifikate ohne Änderung verwenden können, werden aber gleichzeitig auch symbolische Links nach ''/etc/letsencrypt/live'' gesetzt.
Kurz gesagt, für Anwendungen sind nur die jeweiligen Dateien unter ''/etc/letsencrypt/live'' relevant. Dabei vor allem:
* '''/etc/letsencrypt/live/www.example.com/privkey.pem''' (Der private Key)
* '''/etc/letsencrypt/live/www.example.com/fullchain.pem''' (Das erstellte Zertifikat mit der ganzen Signaturkette)
Nichts desto trotz müssen aber auf beiden Verzeichnisse (''archive'' und ''live'') die Zugriffsrechte geändert werden, damit der User ''fhem'' in späterer Folge daraus lesen kann. Für die Sicherheit der Zertifikate hat das keinen Einfluss, die sind durch eigene Dateisystemrechte geschützt.
sudo chmod 0755 /etc/letsencrypt/{live,archive}
Damit FHEM den Private Key lesen kann, ändern wir den Gruppenbesitz der Datei auf die Gruppe ''dialout'':
sudo chgrp dialout /etc/letsencrypt/archive/server/privkey1.pem
Und vergeben anschließend noch eine Leseberechtigung für diese Gruppe:
sudo chmod 0640 /etc/letsencrypt/archive/server/privkey1.pem
Sind alle Berechtigungen vergeben (die sich beim Erneuern der Zertifikate nicht ändern), müssen noch symbolische Links in das Verzeichnis ''/opt/fhem/certs'' erstellt werden, da FHEM die Zertifikats-Dateien genau dort erwartet. Alle folgenden Befehle werden unter dem Benutzerkontext des Users ''fhem'' ausgeführt, damit danach keine Berechtigungen mehr verändert werden müssen.
Zuerst wird das Verzeichnis selbst erstellt:
sudo -u fhem mkdir /opt/fhem/certs
Anschließend ein symbolischer Link für den PrivateKey eingerichtet:
sudo -u fhem ln -s /etc/letsencrypt/live/test.jft.at/privkey.pem /opt/fhem/certs/server-key.pem
Und danach einer für das Zertifikat:
sudo -u fhem ln -s /etc/letsencrypt/live/test.jft.at/fullchain.pem /opt/fhem/certs/server-cert.pem
Die Änderung in FHEM selbst beschränken sich auf eine einzige Änderung am FHEMWEB-Device (''WEB''):
attr WEB HTTPS 1
Danach die Konfiguration speichern und FHEM ist ab sofort unter https://www.example.com:8083/ zu erreichen.

Aktuelle Version vom 9. November 2023, 11:24 Uhr