Let's Encrypt: Unterschied zwischen den Versionen
Zeile 263: | Zeile 263: | ||
* Wenn Ihr ISP dies tut, Sie jedoch weiterhin Zertifikate von Let’s Encrypt erhalten möchten, haben Sie zwei Möglichkeiten: Sie können DNS-01-Challenges verwenden oder Sie können einen der Clients verwenden, der TLS-ALPN-01-Herausforderungen unterstützt (auf Port 443). | * Wenn Ihr ISP dies tut, Sie jedoch weiterhin Zertifikate von Let’s Encrypt erhalten möchten, haben Sie zwei Möglichkeiten: Sie können DNS-01-Challenges verwenden oder Sie können einen der Clients verwenden, der TLS-ALPN-01-Herausforderungen unterstützt (auf Port 443). | ||
= Let's Encrypt | = Let's Encrypt im lokalen Netzwerk = | ||
Ich habe Home Assistant mit HTTPS-Fernzugriff, aber es ist nicht möglich, Home Assistant im lokalen Netzwerk zu erreichen, ohne die Fehlermeldung "Ihre Verbindung ist nicht privat" zu erhalten. | Ich habe Home Assistant mit HTTPS-Fernzugriff, aber es ist nicht möglich, Home Assistant im lokalen Netzwerk zu erreichen, ohne die Fehlermeldung "Ihre Verbindung ist nicht privat" zu erhalten. | ||
* Das liegt daran, dass Ihre lokale IP oder URL nicht im SSL-Zertifikat aufgeführt ist. | * Das liegt daran, dass Ihre lokale IP oder URL nicht im SSL-Zertifikat aufgeführt ist. |
Version vom 1. Dezember 2022, 15:32 Uhr
Let’s Encrypt ist eine Zertifizierungsstelle, die kostenlose X.509-Zertifikate für Transport Layer Security (TLS) anbietet
Beschreibung
- Die Zertifikate haben eine Gültigkeit von jeweils 90 Tagen und können manuell oder automatisch erneuert werden.
- Dabei ersetzt ein automatisierter Prozess die bisher gängigen komplexen händischen Vorgänge bei der Erstellung, Validierung, Signierung, Einrichtung und Erneuerung von Zertifikaten für verschlüsselte Websites.
Überblick
Ziel des Projekts ist es, verschlüsselte Verbindungen im World Wide Web zum Normalfall zu machen.
- Indem unter anderem Zahlung, Webserverkonfiguration, Validierungs-E-Mails und die Sorge um abgelaufene Zertifikate überflüssig werden, sollen Aufwand für Einrichtung und Pflege von TLS-Verschlüsselung deutlich gesenkt werden.
Bei aktuellen Bestrebungen von großen Webbrowser-Projekten, unverschlüsseltes HTTP als überholt zu erklären und zukünftig davor zu warnen oder die Unterstützung einzuschränken, wird unter anderem auf die Verfügbarkeit von Let’s Encrypt gesetzt.
Um sowohl die eigene Vertrauenswürdigkeit zu erhöhen, als auch gegen Angriffe und Manipulationsversuche zu schützen, soll auf größtmögliche Transparenz gesetzt werden.
- Dazu werden zum Beispiel regelmäßig Transparenzberichte veröffentlicht, alle Ausstellungstransaktionen öffentlich protokolliert (u. a.
- mit Certificate Transparency) und möglichst viel auf offene Standards und freie Software gesetzt.
Das Projekt erhielt den FSF Award 2019.
Es werden TLS-Zertifikate mit Domain Validation (DV) ausgestellt.
- Bewusst nicht angeboten werden TLS-Zertifikate mit einer Prüfung auf Organization Validation (OV) und Extended Validation (EV), da deren Antragsprozess per Definition nicht vollautomatisiert möglich ist und der Zweck von Let’s Encrypt ist, eine niederschwellige unmittelbare Ausstellung von TLS-Zertifikaten zu ermöglichen.
Beteiligte
Let’s Encrypt ist ein von der gemeinnützigen Internet Security Research Group (ISRG) angebotener Dienst.
- Hauptsponsoren sind unter anderem die Electronic Frontier Foundation (EFF), die Mozilla Foundation, Akamai, Google Chrome und Cisco Systems.
- Weitere Beteiligte sind die Zertifizierungsstelle IdenTrust, die University of Michigan (U-M), die Stanford Law School, die Linux Foundation
Installation
Syntax
Parameter
Optionen
Umgebungsvariablen
Exit-Status
Konfiguration
Dateien
Anwendung
Sicherheit
Dokumentation
RFC
Man-Pages
Info-Pages
Siehe auch
Links
Projekt-Homepage
Weblinks
- Offizielle Website
- Seth Schoens Vorlesung bei Libre Planet 2015 zu Let’s Encrypt
- technische Einführung in einem Blogeintrag von David Wong
Einzelnachweise
Testfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
TMP 1
Technik
Let’s Encrypt besitzt ein RSA-Stammzertifikat, das in einem Hardware-Sicherheitsmodul verwahrt und nicht direkt verwendet wird.
- Es soll im dritten Quartal 2019 durch ein ECDSA-Stammzertifikat ergänzt werden.
- Damit werden mehrere Zwischenzertifikate signiert, welche durch die Zertifizierungsstelle IdenTrust gegengezeichnet werden. Eines davon dient dann zur Signierung der ausgestellten Zertifikate, die anderen als Ersatz bei Problemen mit dem ersten.
- Durch die IdenTrust-Signatur können die ausgestellten Zertifikate in gebräuchlichen Webbrowsern über die vorinstallierten Stammzertifizierungsstellen geprüft werden.
- So werden Let’s-Encrypt-Zertifikate auf Client-Seite von Anfang an in der Regel ohne weiteres akzeptiert. Seit Ende Juli 2018 ist das Stammzertifikat von Let's Encrypt in allen wichtigen Root-Programmen vertreten.
Protokoll
Zur Automatisierung der Zertifizierung nutzt Let’s Encrypt das Challenge-Response-Verfahren Automatic Certificate Management Environment (ACME).
- Dabei werden verschiedene Anfragen entweder an Unterseiten am Webserver oder direkt DNS-Anfragen an die zu zertifizierende Domain gestellt.
- In beiden Fällen wird ein vorher von Let’s Encrypt erstellter Token entweder auf einer speziellen Unterseite am Web-Server oder als TXT Resource Record im DNS der betreffenden Domain öffentlich abgelegt und von Let’s-Encrypt-Servern in Folge abgefragt.
- Anhand der Antwort mit den Token wird sichergestellt, dass der Antragsteller den Web-Server oder direkt den Nameserver und die damit verknüpfte Domain kontrolliert ().
Auf dem Server-System müssen diese Anfragen korrekt beantwortet werden.
- Dazu bietet das Protokoll verschiedene Möglichkeiten.
- Bei einer wird dazu von der ACME-Client-Software ein besonders konfigurierter TLS-Server eingerichtet, der mittels Server Name Indication auf besondere Anfragen der Zertifizierungsstelle antwortet (Domain-Validierung mittels Server Name Indication, DVSNI).
- Dieses Verfahren wird allerdings nur für eine erste Zertifikatsausstellung für eine Domain akzeptiert (sogenanntes „trust on first use“, TOFU – Vertrauen bei erster Benutzung).
- Danach kommt die alternative Validierung über ein bestehendes Zertifikat zum Einsatz.
- Bei Verlust der Kontrolle über ein bereits ausgestelltes Zertifikat muss daher ein Zertifikat von einem Drittanbieter erworben werden, um wieder ein Let’s-Encrypt-Zertifikat zu erhalten.
Die Validierungsverfahren werden mehrmals über verschiedene Netzwerkpfade durchgeführt.
- Zur Erschwerung von DNS-Spoofing ist die Prüfung von DNS-Einträgen von mehreren geographisch verteilten Standpunkten aus vorgesehen.
Bei ACME-Interaktionen werden JSON-Dokumente über HTTPS-Verbindungen ausgetauscht. Das Protokoll wurde im März 2019 von der Internet Engineering Task Force als Request for Comments im Status eines vorgeschlagenen Internetstandards veröffentlicht.
Server-Implementierung
Die Zertifizierungsstelle besteht im Wesentlichen aus einer in Go geschriebenen Software namens Boulder, die die Server-Seite des ACME-Protokolls implementiert.
- Sie wird als freie Software auch in Quelltextform unter den Bedingungen von Version 2 der Mozilla Public License (MPL) verbreitet. Sie stellt eine REST-Programmierschnittstelle zur Verfügung, auf die TLS-verschlüsselt zugegriffen werden kann.
Für verschiedene Linux-Distributionen existieren Pakete, welche die Cert-Updates automatisch durchführen, so für Debian das package Certbot.
Clients
Durch den offenen Standard ACME sind mittlerweile über 40 unterschiedliche Clients entwickelt worden.
Im Rahmen des Projekts wurde eine Apache-lizenzierte Nach der Installation und Zustimmung zu einem Benutzervertrag genügt die Ausführung des reinen Befehls, um ein gültiges Zertifikat installiert zu bekommen.
- Es können aber auch zusätzliche Funktionen wie OCSP stapling oder HTTP Strict Transport Security (HSTS) eingestellt werden. Die automatische Einrichtung funktioniert zunächst allerdings nur mit Apache und nginx.
- Der Client kann aus den Paketquellen diverser Linux-Distributionen installiert werden, beispielsweise aus den Debian-Paketquellen.
Daneben gibt es mit acmetool einen in Go geschriebenen mit vor-kompilierten, statischen Programmdateien Client.
- Die Seite Get HTTPS for free! ist ein HTTP/2-kompatibler Webserver, der vollautomatisch ein Zertifikat erzeugt und Inhalte per HTTPS ausliefert.
- Ein weiterer weit verbreiteter Client ist acme-tiny, ein in Python geschriebener Client, er ist weniger als 200 Zeilen lang und soll somit von jedem Nutzer vor der Verwendung selbst gelesen werden.
TMP 2
ACME Client Implementierungen
Let’s Encrypt verwendet das ACME-Protokoll, um zu überprüfen, ob Sie einen bestimmten Domainnamen steuern und um Ihnen ein Zertifikat auszustellen.
- Um ein Let’s Encrypt-Zertifikat zu erhalten, müssen Sie eine ACME-Clientsoftware auswählen.
Die folgenden ACME-Clients werden von Dritten angeboten.
- Let’s Encrypt kontrolliert oder überprüft keine Clients von Drittanbietern und kann keine Garantie für deren Sicherheit oder Zuverlässigkeit abgeben.
Einige ACME-Clients im Browser sind zwar verfügbar, werden hier jedoch nicht aufgeführt, da sie einen manuellen Erneuerungsworkflow fördern, der zu einer schlechten Benutzererfahrung führt und das Risiko von versäumten Erneuerungen erhöht.
Empfohlen: Certbot
Wir empfehlen, dass die meisten Leute mit dem Certbot Client beginnen.
- Er kann einfach ein Zertifikat für Sie erhalten oder auch bei der Installation geholfen werden, je nachdem, was Sie bevorzugen.
- Es ist einfach zu bedienen, funktioniert mit vielen Betriebssystemen und ist gut dokumentiert.
Wenn certbot nicht Ihren Anforderungen entspricht oder Sie einfach etwas anderes ausprobieren möchten, können Sie unten aus einer Vielzahl von Clients auswählen, sortiert nach der Sprache oder Umgebung, in der sie ausgeführt werden.
ACMEv1 und ACMEv2
Let’s Encrypt unterstützt die ACMEv2 API, welche kompatibel ist mit dem finalisierten ACME Standard.
- Wir bauen langsam die ältere ACMEv1 API in 2020 und 2021 ab.
- Wenn Sie bereits einen dieser Clients verwenden, stellen Sie sicher, dass Sie auf die neueste Version aktualisieren.
- Wenn der von Ihnen verwendete Client unten nicht aufgeführt ist, wenden Sie sich an die Projektbetreuer, oder wechseln Sie zu einem anderen Client.
https://letsencrypt.org/de/docs/client-options/
Erste Schritte
Um HTTPS auf Ihrer Website zu aktivieren, brauchen Sie ein Zertifikat (eine Datei) von einer Zertifizierungsstelle (CA).
- Let’s Encrypt ist eine CA.
- Um für Ihre Domain ein Zertifikat von Let’s Encrypt zu bekommen, müssen Sie nachweisen, dass Sie die Kontrolle über diese Domain haben.
- Mit Let’s Encrypt benutzen Sie Software, die das ACME-Protokoll benutzt, welches typischerweise auf Ihrem Web-Host läuft.
Um herauszufinden, welche Methode für Sie die richtige ist, ist es wichtig herauszufinden, ob Sie zu Ihrer Webseite Shell-Zugang haben (auch bekannt als SSH-Zugang).
- Wenn Sie Ihre Website durch eine Kontrollschnittstelle verwalten wie cPanel, Plesk oder WordPress, dann haben Sie wahrscheinlich keinen Shell-Zugang.
- Sicherheitshalber können Sie Ihren Dienstanbieter fragen.
Mit Shell-Zugang
Wir empfehlen den meisten Leuten mit Shell-Zugang die Benutzung des ACME Certbots.
- Er kann Zertifikate automatisch ohne Ausfallzeit erstellen und installieren.
- Er hat auch einen Expertenmodus für Leute, die keine Autokonfiguration möchten.
- Er ist einfach zu benutzen, funktioniert auf vielen Betriebssystemen und hat eine großartige Dokumentation. Besuchen Sie die Seite von Certbot, um passende Anleitungen für Ihr Betriebssystem und ihren Server zu erhalten.
Wenn Certbot nicht ihren Anforderungen entspricht, oder Sie einen anderen Client verwenden möchten, gibt es viele weitere ACME-Clients zur Auswahl.
- Sobald Sie einen ACME-Client gewählt haben, können Sie in die dazugehörige Dokumentation verwenden.
Wenn Sie mit unterschiedlichen ACME-Clients experimentieren, benutzen Sie die Staging-Umgebung, um zu verhindern, dass die Anfragelimits überschritten werden.
Ohne Shell-Zugriff
Der beste Weg, Let’s Encrypt ohne Shell-Zugriff zu benutzen, ist der eingebaute Support von Ihrem Hosting-Provider.
- Wenn Ihr Hosting-Provider Let’s Encrypt Unterstützung anbietet, dann kann er in Ihrem Namen freie Zertifikate anfordern, installieren und automatisch aktuell halten.
- Bei einigen Hosting-Providern müssen Sie diese Unterstützung einschalten.
- Andere Provider machen dies automatisch für ihre Kunden.
Überprüfen Sie unsere Liste von Hosting-Providern, um zu sehen, ob Ihrer mit dabei ist.
- Wenn das so ist, folgen Sie der Dokumentation, um Ihr Let’s Encrypt-Zertifikat einzurichten.
Wenn Ihr Hosting Provider-Let’s Encrypt nicht unterstützt, können Sie ihn kontaktieren und Unterstützung anfragen.
- Wir tun unser Bestes, um Let’s Encrypt-Unterstützung zu ermöglichen und Provider sind oft sehr froh, wenn dieser Vorschlag von ihren Kunden kommt!
Wenn Ihr Hosting-Provider Let’s Encrypt nicht integrieren möchte, aber das Hochladen von eigenen Zertifikaten unterstützt, können Sie Certbot auf Ihrem eigenen Rechner installieren und im manuellen Modus benutzen.
- Im manuellen Modus laden Sie eine spezielle Datei auf Ihre Website, um zu beweisen, dass Sie die Kontrolle über diese haben.
- Certbot wird dann ein Zertifikat abrufen, welches Sie dann zu Ihrem Hosting-Provider hochladen können.
- Wir empfehlen diese Methode nicht, denn sie kostet viel Zeit und Sie müssen sie mehrmals im Jahr wiederholen, da Ihr Zertifikat abläuft.
- Für viele Benutzer ist es besser, Let’s Encrypt-Unterstützung von ihrem Hosting-Provider anzufordern oder zu einem anderen Anbieter zu wechseln.
Hilfe erhalten
Wenn Sie Fragen haben zur Auswahl eines ACME-Clients, zur Benutzung eines besonderen Clients oder eine andere Frage bezüglich Let’s Encrypt haben, können Sie gerne unser hilfreiches Community Forum besuchen.
Wie es funktioniert
Das Ziel von Let’s Encrypt und des ACME-Protokolls besteht darin, die Einrichtung eines HTTPS-Servers zu ermöglichen, der automatisch ein vertrauenswürdiges Browserzertifikat ohne menschliches Eingreifen erhält.
- Dies wird durch Ausführen eines Zertifikatsverwaltungsagenten auf dem Webserver erreicht.
Um zu verstehen, wie die Technologie funktioniert, gehen wir die Einrichtung von https://example.com/ mit einem Zertifikatsverwaltungsagenten durch, der Let’s Encrypt unterstützt.
Dieser Prozess umfasst zwei Schritte.
- Zunächst weist der Agent der Zertifizierungsstelle nach, dass der Webserver eine Domain kontrolliert.
- Anschließend kann der Agent Zertifikate für diese Domain anfordern, erneuern und widerrufen.
Domain-Validierung
Let’s Encrypt identifiziert den Serveradministrator anhand des öffentlichen Schlüssels.
- Wenn die Agentensoftware zum ersten Mal mit Let’s Encrypt interagiert, generiert sie ein neues Schlüsselpaar und weist der Let’s Encrypt-Zertifizierungsstelle nach, dass der Server eine oder mehrere Domain kontrolliert.
- Dies ist vergleichbar mit dem traditionellen CA-Verfahren, bei dem ein Konto erstellt und diesem Konto Domains hinzugefügt werden.
Um den Prozess zu starten, fragt der Agent die Let’s Encrypt-Zertifizierungsstelle, was zu tun ist, um zu beweisen, dass sie example.com kontrolliert.
- Die Let’s Encrypt-Zertifizierungsstelle prüft den angeforderten Domainnamen und gibt eine oder mehrere Herausforderungen heraus.
- Es gibt verschiedene Möglichkeiten, mit denen der Agent die Kontrolle über die Domain nachweisen kann.
- Beispielsweise kann die Zertifizierungsstelle dem Agenten die Wahl zwischen folgenden Optionen geben:* Bereitstellung eines DNS-Eintrags unter example.com oder
- Bereitstellung einer HTTP-Ressource unter einer bekannten URI unter http://example.com/
Neben den Herausforderungen bietet die Let’s Encrypt-Zertifizierungsstelle auch eine Nonce, die der Agent mit seinem privaten Schlüsselpaar signieren muss, um zu beweisen, dass er das Schlüsselpaar kontrolliert.
"Aufforderung zur Validierung von example.com stellen"
Die Agentensoftware erfüllt eine der gestellten Herausforderungen.
- Nehmen wir an, sie ist in der Lage, die zweite Aufgabe oben auszuführen: Sie erstellt eine Datei in einem angegebenen Pfad auf der Website http://example.com.
- Der Agent signiert die bereitgestellte Nonce außerdem mit seinem privaten Schlüssel.
- Nachdem der Agent diese Schritte ausgeführt hat, benachrichtigt er die Zertifizierungsstelle, dass sie zur Validierung bereit ist.
Dann ist es die Aufgabe der Zertifizierungsstelle, zu überprüfen, ob die Aufforderungen erfüllt sind.
- Die Zertifizierungsstelle überprüft die Signatur auf der Nonce und versucht, die Datei vom Webserver herunterzuladen und sicherzustellen, dass sie den erwarteten Inhalt hat.
"Erfordert Autorisierung um für example.com zu agieren"
Wenn die Signatur über die Nonce gültig ist und die Herausforderungen ausgecheckt werden, ist der durch den öffentlichen Schlüssel identifizierte Agent berechtigt, die Zertifikatsverwaltung für example.com durchzuführen.
- Wir nennen das Schlüsselpaar, dass der Agent ein “autorisiertes Schlüsselpaar” für example.com verwendet hat.
Zertifikatausstellung und Widerruf
Wenn der Agent über ein autorisiertes Schlüsselpaar verfügt, ist das Anfordern, Erneuern und Sperren von Zertifikaten ganz einfach: Senden Sie einfach Zertifikatsverwaltungsnachrichten und signieren Sie sie mit dem autorisierten Schlüsselpaar.
Um ein Zertifikat für die Domain zu erhalten, erstellt der Agent eine PKCS#10-Anforderung Zertifikatsignierungsanforderung, in der die Let’s Encrypt-Zertifizierungsstelle aufgefordert wird, ein Zertifikat für example.com mit einem angegebenen öffentlichen Schlüssel auszustellen.
- Wie üblich enthält der CSR eine Signatur des privaten Schlüssels, der dem öffentlichen Schlüssel in dem CSR entspricht.
- Der Agent signiert außerdem die gesamte CSR mit dem autorisierten Schlüssel für example.com, damit die Let’s Encrypt-Zertifizierungsstelle weiß, dass sie autorisiert ist.
Wenn die Let’s Encrypt-Zertifizierungsstelle die Anforderung erhält, werden beide Signaturen überprüft.
- Wenn alles gut aussieht, wird ein Zertifikat für example.com mit dem öffentlichen Schlüssel aus dem CSR ausgestellt und an den Agenten zurückgegeben.
"Anfordern eines Zertifikats für example.com"
Der Widerruf funktioniert auf ähnliche Weise.
- Der Agent unterzeichnet eine Sperranforderung mit dem für example.com autorisierten Schlüsselpaar, und die Let’s Encrypt-Zertifizierungsstelle überprüft, ob die Anforderung autorisiert ist.
- In diesem Fall werden Sperrinformationen in den normalen Sperrkanälen (z.B.
- OCSP) veröffentlicht, sodass vertrauende Parteien wie Browser wissen können, dass sie das widerrufene Zertifikat nicht akzeptieren sollten.
[[Image:Bild4.png|top|Anfrage zum Widerruf eines Zertifikats für example.com
Beste Praxis
- Port 80 offen halten
Gelegentlich erhalten wir Berichte von Personen, die Probleme mit der Verwendung des Aufforderungstyps HTTP-01 haben, weil sie den Port 80 für ihren Webserver durch eine Firewall geschützt haben.
- Wir empfehlen, dass alle Server, die für die allgemeine Webnutzung vorgesehen sind, sowohl HTTP auf Port 80 als auch HTTPS auf Port 443 anbieten.
- Sie sollten auch Weiterleitungen für alle Port 80-Anforderungen und möglicherweise einen HSTS-Header (auf Port 443-Anforderungen) senden.
Das Zulassen von Port 80 führt nicht zu einem größeren Angriffsvektor auf Ihrem Server, da Anforderungen an Port 80 im Allgemeinen von derselben Software bedient werden wie auf Port 443.
Das Schließen von Port 80 verringert nicht das Risiko für eine Person, die versehentlich Ihre Webseite über HTTP besucht.
- Unter normalen Umständen würde diese Person eine Weiterleitung zu HTTPS erhalten, und der nachfolgende Datenverkehr wird geschützt.
- Wenn diese Person einem aktiven Man-In-The-Middle-Angriff (MITM) unterliegt, antwortet der MITM auf Port 80, sodass Ihre Site niemals die Möglichkeit hat, mit “Verbindung abgelehnt” zu antworten.
Wenn Sie den Port 80 offen halten, um eine Weiterleitung zu ermöglichen, können die Benutzer die richtige Version Ihrer Webseite (die HTTPS-Version) aufrufen.
- Es gibt verschiedene Situationen, auf die Sie keinen Einfluss haben und die möglicherweise kurzzeitig jemanden auf der HTTP-Version Ihrer Webseite landen - beispielsweise die automatische Verknüpfung in E-Mails oder die manuelle Eingabe eines Domainnamens.
- Es ist für sie besser, eine Weiterleitung als einen Fehler zu erhalten.
Leider haben Sie möglicherweise keine Kontrolle darüber, ob Port 80 für Ihre Webseite blockiert ist.
- Einige (hauptsächlich private) Internetdienstanbieter blockieren Port 80 aus verschiedenen Gründen.
- Wenn Ihr ISP dies tut, Sie jedoch weiterhin Zertifikate von Let’s Encrypt erhalten möchten, haben Sie zwei Möglichkeiten: Sie können DNS-01-Challenges verwenden oder Sie können einen der Clients verwenden, der TLS-ALPN-01-Herausforderungen unterstützt (auf Port 443).
Let's Encrypt im lokalen Netzwerk
Ich habe Home Assistant mit HTTPS-Fernzugriff, aber es ist nicht möglich, Home Assistant im lokalen Netzwerk zu erreichen, ohne die Fehlermeldung "Ihre Verbindung ist nicht privat" zu erhalten.
- Das liegt daran, dass Ihre lokale IP oder URL nicht im SSL-Zertifikat aufgeführt ist.
- Und es ist nicht möglich, die Home Assistant-App für Android zu verwenden, weil der SSL-Fehler auftritt.
- Ich habe keine guten Lösungen im Internet gefunden, aber ich habe eine einfache Lösung gefunden, die in diesem Beitrag beschrieben wird.
- Natürlich können Sie diese Lösung auch für andere Anwendungen als Home Assistant verwenden.
Was Sie brauchen
- Eine eigene Domain mit Zugriff auf das DNS
- Den (Linux-)Server in Ihrem lokalen Netzwerk mit Root-Rechten, in meinem Fall einen Raspberry Pi.
Certbot installieren
Die SSL-Zertifikate werden auf dem Raspberry Pi generiert, melden Sie sich als Benutzer pi über SSH an und installieren Sie certbot:
$ sudo apt install certbot
Überprüfen Sie, ob certbot gut funktioniert mit:
$ certbot --version
Installation von acme-dns-certbot-joohoi
Da ich im Netzwerk keinen Port 80 für die ACME-Verifizierung zur Verfügung habe, verwende ich die DNS-01-Verifizierung.
- Ich verwende acme-dns-certbot-joohoi dafür.
- So wird es installiert:
$ wget https://github.com/joohoi/a,cme-dns-certbot-joohoi/raw/master/acme-dns-auth.py $ chmod +x acme-dns-auth.py $ vi acme-dns-auth.py #!/usr/bin/env python3 sudo mv acme-dns-auth.py /etc/letsencrypt/
Getting the certificates
We’re now going to generate a wildcard certificate on the subdomain home of your domain.
- I’m using the subdomain home and you’ll get the result *.home.example.com.
Now execute the generation of the wildcard certificate:
$ sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d home.example.com
With this script you’re getting the CNAME record for DNS validation and looks like this:
Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.home.example.com CNAME a14de1b9-e910-4d91-18bf-07a3763b88e6.auth.acme-dns.io.
Waiting for verification...
Login into your domain provider and add the following records to your domain:
Hostname | Type | Value |
---|---|---|
_acme-challenge.home.example.com | CNAME | a14de1b9-e910-4d91-18bf-07a3763b88e6.auth.acme-dns.io. |
home.example.com | A | |
rpi.home.example.com | A | |
extern.home.example.com | CNAME | home.example.com |
Explanation:
- _acme-challenge.home.example.com: for ACME DNS verification (for example: a14de1b9-e910-4d91-18bf-07a3763b88e6.auth.acme-dns.io.).
- Remark: this could be without a dot after dns.io
- home.example.com: The public IP of your router
- rpi.home.example.com: The local IP address of the Raspberry Pi (example: 192.168.1.5)
- extern.home.example.com: This is the external url to reach your application (example Home Assistant)
After you’ve added the DNS records, you maybe need to wait a while until the new DNS settings are propagated on the internet.
Now you can restart the certbot tool again and you will get the certificates successfully! If it isn’t successful yet, please wait and retry it again or check your DNS records.
- Maybe you made a mistake with the _acme-challenge.home.example.com record.
$ sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d home.example.com
Testing
If you didn’t do this yet, you need to forward the ports from your router to the Raspberry Pi.
- For Home Assistant it is 8123/tcp.
- Local network
Access Home Assistant now with in this example: https://rpi.home.example.com:8123 and the certificate is valid for the domain your using! Hurray!
- External access via the internet
Access Home Assistant now with in this example: https://external.home.example.com:8123 and the certificate is valid for the domain your using again.