Wie erhalten Sie ein Let’s Encrypt-Zertifikat mittels DNS-Validierung mit acme-dns-certbot auf Ubuntu 18.04

Der Autor hat den COVID-19-Hilfsfonds als Empfänger einer Spende im Rahmen des Write for Donations-Programms ausgewählt.

Einführung

Die Mehrheit der Zertifikate von Let’s Encrypt wird mit Hilfe der HTTP-Validierung ausgestellt, die eine einfache Installation von Zertifikaten auf einem einzelnen Server ermöglicht. Die HTTP-Validierung ist jedoch nicht immer geeignet, um Zertifikate für den Einsatz auf Lastenausgleichs-Websites auszustellen, und sie kann auch nicht verwendet werden, um Wildcard-Zertifikate auszustellen.

Die DNS-Validierung ermöglicht es, Zertifikatsanträge mithilfe von DNS-Einträgen zu überprüfen, anstatt Inhalte über HTTP bereitzustellen. Dadurch können gleichzeitig Zertifikate für einen Cluster von Webservern, die hinter einem Lastenausgleicher laufen, oder für ein System, das nicht direkt über das Internet zugänglich ist, ausgestellt werden. Auch Wildcard-Zertifikate werden mit DNS-Validierung unterstützt.

Das acme-dns-certbot-Tool wird verwendet, um Certbot mit einem Drittanbieter-DNS-Server zu verbinden, auf dem die Zertifikatvalidierungsdaten automatisch über eine API eingetragen werden können, wenn Sie ein Zertifikat beantragen. Der Vorteil hierbei besteht darin, dass Sie Certbot nicht direkt mit Ihrem DNS-Anbieterkonto integrieren oder ihm uneingeschränkten Zugriff auf Ihre vollständige DNS-Konfiguration gewähren müssen, was sich positiv auf die Sicherheit auswirkt.

Delegierte DNS-Bereiche werden verwendet, um Abfragen für die Zertifikatvalidierungsdaten auf den Drittanbieter-DNS-Dienst umzuleiten, sodass Sie nach der initialen Einrichtung beliebig viele Zertifikate beantragen können, ohne dass Sie jede Manuellen Validierung durchführen müssen.

Ein weiterer wichtiger Vorteil von acme-dns-certbot besteht darin, dass es verwendet werden kann, um Zertifikate für individuelle Server auszustellen, die möglicherweise hinter einem Lastverteiler laufen oder auf andere Weise nicht direkt über HTTP zugänglich sind. traditionelle HTTP-Zertifikatvalidierungen können in solchen Fällen nicht verwendet werden,除非您在每一台服务器上设置验证文件。 Das acme-dns-certbot-Tool ist auch nützlich, wenn Sie ein Zertifikat für einen Server ausstellen möchten, der nicht über das Internet zugänglich ist, wie z.B. ein internes System oder ein Staging-Umfeld.

In diesem Leitfaden verwenden Sie das acme-dns-certbot-Hook für Certbot, um ein Let’s Encrypt-Zertifikat mithilfe der DNS-Validierung auszustellen.

Voraussetzungen

Um dieses Lehrbuch abschließen zu können, brauchen Sie Folgendes:

  • Ein Ubuntu 18.04-Server, der durch die Anleitung Erste Schritte mit Ubuntu 18.04 eingerichtet wurde, inklusive eines sudo-Nicht-Root-Benutzers.

  • Ein Domänenname, für den Sie ein TLS-Zertifikat erwerben können, einschließlich der Fähigkeit, DNS-Einträge hinzuzufügen. In diesem speziellen Beispiel werden wir your-domain und subdomain.your-domain verwenden, sowie *.your-domain für ein Wildcard-Zertifikat. Dies kann erforderlichenfalls für andere Domänen, Subdomänen oder Wildcard-Zertifikate angepasst werden.

Sobald Sie diese fertig haben, melden Sie sich mit Ihrem Nicht-Root-Benutzer auf Ihrem Server an, um zu beginnen.

Schritt 1 — Installation von Certbot

In diesem Schritt installieren Sie Certbot, ein Programm zum Ausstellen und Verwalten von Let’s Encrypt-Zertifikaten.

Certbot ist in den offiziellen Ubuntu Apt-Repositories verfügbar, es wird jedoch empfohlen, das Repository der Certbot-Entwickler zu verwenden, da es immer die aktuellste Version der Software enthält.

Fangen Sie damit an, das Certbot-Repository hinzuzufügen:

sudo apt-add-repository ppa:certbot/certbot

Sie müssen die Eingabeaufforderung mit der Eingabetaste bestätigen, um das neue Repository zu Ihrem System hinzuzufügen.

Installieren Sie als nächstes das Certbot-Paket:

sudo apt install certbot

Nachdem die Installation abgeschlossen ist, können Sie überprüfen, ob Certbot erfolgreich installiert wurde:

certbot --version

Dies sollte eine ähnliche Ausgabe wie folgt erzeugen:

Output
certbot 0.31.0

In diesem Schritt haben Sie Certbot installiert. Als nächstes werden Sie den acme-dns-certbot-Hook herunterladen und installieren.

Schritt 2 — Installation von acme-dns-certbot

Jetzt, da das Basissystem Certbot installiert ist, können Sie acme-dns-certbot herunterladen und installieren, um Certbot im DNS-Validierungsmodus zu verwenden.

Fangen Sie damit an, eine Kopie des Skripts herunterzuladen:

Hinweis: Als Best Practice bitte sicherstellen, dass Sie diesen Github-Repository und das Skript vor der Ausführung durchsuchen. Sie können auch zunächst dieses Repository forken und anschließend das Skript acme-dns-certbot.py verwenden. Dieser Fork bietet zusätzlichen Schutz, indem sichergestellt wird, dass das Skript unter unserer Kontrolle bleibt und weniger anfällig für unbestätigte Änderungen ist.

wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

Nach dem Herunterladen markieren Sie das Skript als ausführbar:

chmod +x acme-dns-auth.py

Verwenden Sie anschließend Ihren Lieblings-Texteditor, um die Datei zu bearbeiten und die erste Zeile anzupassen, um es zu zwingen, Python 3 zu verwenden:

nano acme-dns-auth.py

Fügen Sie 3 am Ende der ersten Zeile hinzu:

acme-dns-certbot.py
#!/usr/bin/env python3
. . .

Dies ist erforderlich, um sicherzustellen, dass das Skript die neueste unterstützte Version von Python 3 verwendet, anstatt die veraltete Python-Version 2.

Nach Abschluss speichern und schließen Sie die Datei.

Schließlich verschieben Sie das Skript in das Certbot Let’s Encrypt-Verzeichnis, damit Certbot es laden kann:

sudo mv acme-dns-auth.py /etc/letsencrypt/

In diesem Schritt haben Sie das acme-dns-certbot-Hook heruntergeladen und installiert. Danach können Sie den Setup-Prozess beginnen und sich auf die Ausstellung Ihres ersten Zertifikats vorbereiten.

Schritt 3 — Einrichtung von acme-dns-certbot

Um mit acme-dns-certbot beginnen zu können, müssen Sie einen Einrichtungsprozess abschließen und mindestens ein Zertifikat ausstellen.

Beginnen Sie mit dem Ausführen von Certbot, um ein Zertifikat mittels DNS-Validierung auszustellen. Dies führt den acme-dns-certbot-Skript aus und triggert den initialen Setup-Prozess:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

Sie verwenden das Argument --manual, um alle automatisierten integrierten Features von Certbot zu deaktivieren. In diesem Fall erhalten Sie lediglich ein Rohzertifikat, anstatt es automatisch auf einem Dienst einzusetzen.

Sie konfigurieren Certbot, um den acme-dns-certbot-Hook zu verwenden, indem Sie das Argument --manual-auth-hook verwenden. Sie führen das Argument --preferred-challenges aus, sodass Certbot DNS-Validierung bevorzugt.

Sie müssen auch Certbot anweisen, vor dem Versuch, das Zertifikat zu validieren, zu pausieren, was Sie mit dem Argument --debug-challenges tun. Dies ermöglicht Ihnen, die von acme-dns-certbot benötigten DNS CNAME-Zertifikate vorher in diesem Schritt einzusetzen. Ohne das Argument --debug-challenges würde Certbot nicht pausieren, sodass Sie nicht die Zeit haben, die erforderliche DNS-Änderung vorzunehmen.

Erinnern Sie sich, jeden der Domänennamen, den Sie verwenden möchten, mit dem -d-Argument einzusetzen. Wenn Sie einen Wildcard-Zertifikat ausstellen möchten, stellen Sie sicher, dass das Sternchen (*) mit einem Backslash (\) escaped wird.

Nachdem Sie die Standard-Schritte von Certbot durchlaufen haben, werden Sie schließlich mit einer Nachricht wie folgendem aufgefordert:

Output
... Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io. Waiting for verification... ...

Sie müssen die erforderliche DNS CNAME-Eintrag in die DNS-Konfiguration Ihres Domänen hinzufügen. Dies delegiert die Kontrolle über die Subdomain _acme-challenge an den ACME-DNS-Dienst, der es acme-dns-certbot ermöglicht, die erforderlichen DNS-Einträge zu setzen, um die Zertifikatsanforderung zu validieren.

Wenn Sie DigitalOcean als Ihren DNS-Anbieter verwenden, können Sie den DNS-Eintrag direkt in Ihrem Kontrollpanel festlegen:

Es wird empfohlen, den TTL (Time-to-Live) auf etwa 300 Sekunden zu setzen, um sicherzustellen, dass Änderungen an dem Eintrag schnell propagiert werden.

Sobald Sie den DNS-Eintrag eingerichtet haben, gehen Sie zu Certbot zurück und drücken Sie ENTER, um die Zertifikatsanforderung zu validieren und den Ausstellungsprozess abzuschließen.

Dies dauert ein paar Sekunden, und Sie sehen dann eine Nachricht, die bestätigt, dass das Zertifikat ausgestellt wurde:

Output
... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your-domain/privkey.pem ...

Sie haben acme-dns-certbot zum ersten Mal ausgeführt, die erforderlichen DNS-Einträge eingerichtet und ein Zertifikat erfolgreich ausgestellt. Im nächsten Schritt setzen Sie die automatische Verlängerung Ihres Zertifikats ein.

Schritt 4 — Acme-dns-certbot verwenden

In diesem letzten Schritt werden Sie acme-dns-certbot verwenden, um weitere Zertifikate auszuschicken und bestehende zu verlängern.

Zunächst, nun, da Sie mindestens ein Zertifikat mit acme-dns-certbot erfolgreich ausgestellt haben, können Sie weitere Zertifikate für dieselben DNS-Namen ausstellen, ohne einen weiteren DNS-CNAME-Eintrag hinzuzufügen. Wenn Sie jedoch ein Zertifikat für eine andere Unterdomain oder eine völlig neue Domänenname erwerben möchten, werden Sie aufgefordert, einen weiteren CNAME-Eintrag hinzuzufügen.

Zum Beispiel könnten Sie ein weiteres eigenständiges Platzhalterzertifikat ausstellen, ohne die Überprüfung erneut durchzuführen:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

Wenn Sie jedoch versuchen, ein Zertifikat für eine Unterdomain auszustellen, werden Sie aufgefordert, einen CNAME-Eintrag für die Unterdomain hinzuzufügen:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

Dadurch wird ein Output angezeigt, der dem initialen Setup in Schritt 3 entspricht:

Output
... Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io. Waiting for verification... ...

Nun, da Sie acme-dns-certbot verwenden können, um Zertifikate auszustellen, ist es lohnenswert, auch auf die Verlängerung des Verfahrens zu achten.

Sobald Ihre Zertifikate dem Ablauf nahe sind, kann Certbot sie automatisch für Sie verlängern:

sudo certbot renew

Der Verlängerungsprozess kann von der Anfangsphase bis zum Ende ohne Benutzereingriff durchlaufen werden und wird alle Configurationseinstellungen merken, die Sie während der initialen Einrichtung festgelegt haben.

Um zu testen, ob dies funktioniert, ohne bis zum Ablaufdatum zu warten, kannst du einen Testlauf aktivieren. Dies wird den Renewal-Prozess simulieren, ohne jederzeitige Änderungen an deiner Konfiguration durchzuführen.

Du kannst einen Testlauf mit der Standard-renew-Befehl triggern, aber mit dem --dry-run-Argument:

sudo certbot renew --dry-run

Dadurch wird etwas Ähnliches ausgegeben, das dir zuversicht macht, dass der Renewal-Prozess korrekt funktioniert:

Output
... Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for your-domain dns-01 challenge for your-domain Waiting for verification... Cleaning up challenges ...

In diesem letzten Schritt hast du ein weiteres Zertifikat ausgestellt und dann den automatischen Renewal-Prozess innerhalb von Certbot getestet.

Fazit

In diesem Artikel hast du Certbot mit acme-dns-certbot eingerichtet, um Zertifikate mittels DNS-Validierung auszustellen. Dies ermöglicht die Verwendung von Wildcard-Zertifikaten sowie die Verwaltung eines großen Bestands an unterschiedlichen Web-Servern, die hinter einem Load Balancer stehen könnten.

Bitte halte dich auf dem Laufenden bezüglich Updates im acme-dns-certbot-Repository, da es immer empfehlenswert ist, die aktuell unterstützte Version zu verwenden.

Wenn du mehr über acme-dns-certbot erfahren möchtest, könntest du die Dokumentation für das acme-dns-Projekt anschauen, das das serverseitige Element von acme-dns-certbot ist:

Das acme-dns-Software kann auch selbst verwaltet werden, was vielleicht von Vorteil sein kann, wenn Sie in Hochsicherheits- oder komplexen Umgebungen arbeiten.

Alternativ könnten Sie in die technischen Details der ACME-DNS-Validierung einsteigen, indem Sie den entsprechenden Abschnitt des offiziellen RFC-Dokuments überprüfen, der beschreibt, wie der Prozess funktioniert:

Source:
https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-dns-validation-with-acme-dns-certbot-on-ubuntu-18-04