Wie man Let’s Encrypt SSL/TLS-Zertifikate mit Certbot erstellt und verwaltet
Let’s Encrypt ist eine automatisierte und offene Zertifizierungsstelle (CA), die von der Internet Security Research Group (ISRG) betrieben und von der Electronic Frontier Foundation (EFF), der Mozilla Foundation und anderen gegründet wurde. Es bietet kostenlose SSL/TLS-Zertifikate, die üblicherweise zur Verschlüsselung der Kommunikation zu Sicherheits- und Datenschutzzwecken verwendet werden, wobei der bemerkenswerteste Anwendungsfall HTTPS ist. Let’s Encrypt stützt sich auf das ACME-Protokoll (Automatic Certificate Management Environment), um Zertifikate auszustellen, zu widerrufen und zu erneuern. Certbot ist ein kostenloses und quelloffenes Dienstprogramm, das hauptsächlich für die Verwaltung von SSL/TLS-Zertifikaten der Zertifizierungsstelle Let’s Encrypt verwendet wird. Es ist für die meisten UNIX- und UNIX-ähnlichen Betriebssysteme verfügbar, einschließlich GNU/Linux, FreeBSD, OpenBSD und OS X. Dieser Leitfaden bietet eine plattformunabhängige Einführung in die Verwendung von Certbot.
HINWEIS: Da certbot noch in Arbeit ist, können sich einige in diesem Handbuch beschriebene Funktionen oder Verhaltensweisen in älteren oder zukünftigen Versionen unterscheiden.
Anforderungen
- Ein registrierter Domänenname mit einem A-Eintrag, der auf Ihre IPv4-Adresse verweist. Als Beispiel wird `www.example.com` verwendet.
- Zugang zu einer privilegierten Shell.
Allgemeine Konzepte
Betriebsarten
Die Verwendung von certbot zur Aktivierung von HTTPS kann in zwei Teile unterteilt werden: Authentifizierung und Installation. Die erste erfordert das Lösen einer Herausforderung und das Speichern des Zertifikats und anderer Dateien. Der Installationsschritt umfasst die Konfiguration und Sicherung des Webservers. Certbot kann mit dem Unterbefehl run automatisch beides ausführen. Die Unterbefehle certonly und install sind für die Authentifizierungs- bzw. Installationsschritte vorgesehen.
Certbot enthält auch Funktionen zur Erneuerung und zum Widerruf von Zertifikaten.
Herausforderungen
Der Erhalt eines Let’s Encrypt-Zertifikats umfasst die Lösung einer Domain-Validierungsaufgabe, die von einem ACME-Server (Automatic Certificate Management Environment) ausgestellt wurde. Mit dieser Prüfung wird Ihr Eigentum an der/den Domain(s), für die Sie ein Zertifikat erhalten möchten, überprüft. Es gibt verschiedene Challenge-Typen, der am häufigsten verwendete ist HTTP-01. Wie der Name schon sagt, verwendet es das HTTP-Protokoll. Während HTTP-Server für die Verwendung eines beliebigen TCP-Ports konfiguriert werden können, funktioniert diese Herausforderung aufgrund von Sicherheitsmaßnahmen nur auf Port 80. DNS-01 ist ein weiterer, weniger beliebter Challenge-Typ, der auf der DNS-Auflösung basiert. Beachten Sie, dass Wildcard-Zertifikate nicht über die HTTP-01-Herausforderung erhältlich sind. Dieser Leitfaden wird sich zunächst auf HTTP-01 konzentrieren.
Plugins
Certbot verlässt sich auf Plugins, um die Authentifizierung und Installation durchzuführen. Plugins wie Webroot und Standalone führen nur die Authentifizierung durch, während andere wie die Apache- und Nginx-Plugins so konzipiert sind, dass sie automatisch Zertifikate erhalten und installieren (d.h. Webserver-Konfiguration). Andere Plugins umfassen mehrere herstellerspezifische DNS-Plugins für die DNS-01-Authentifizierung. Die meisten Certbot-Plugins werden separat installiert, mit Ausnahme der Webroot- und Standalone-Plugins, die integriert sind.
Installieren von Certbot
Die meisten Linux-Distributionen bieten Certbot in ihren offiziellen Repositories an. Unten finden Sie Installationsanweisungen für weit verbreitete Plattformen.
Debian und Ubuntu:
apt update
apt install -y certbot
CentOS 7:
yum install -y certbot
Fedora und CentOS 8:
dnf install -y certbot
Arch Linux:
pacman -Sy certbot
FreeBSD:
pkg install py36-certbot
OpenBSD 6.0 und später:
pkg_add certbot
MacOS (Brew erforderlich):
brew install letsencrypt
Andere:
Wenn kein Certbot-Paket für Ihre Plattform verfügbar ist, können Sie das offizielle certbot-auto-Wrapper-Skript verwenden, um certbot automatisch auf Ihrem System zu installieren. Es kann hier heruntergeladen werden.
Verwendung von Certbot
Auflistung von Zertifikaten
Um eine Liste der von certbot verwalteten Zertifikate auf Ihrem Server anzuzeigen, geben Sie den Befehl ein:
certbot certificates
Erhalt eines Zertifikats für die manuelle Konfiguration
Wenn Sie sich für eine manuelle Konfiguration Ihres Webservers entscheiden, kann der Erhalt eines Zertifikats auf zwei Arten erfolgen. Entweder indem Sie certbot Zugriff auf das Webroot-Verzeichnis Ihres Servers geben (d.h. das Webroot-Plugin) oder indem Sie einen temporären eigenständigen Webserver auf Port 80 einsetzen (d.h. das eigenständige Plugin). Letzteres Plugin ist in Fällen nützlich, in denen eine Integration mit Ihrem bestehenden Webserver nicht möglich oder nicht gewünscht ist. Aus Gründen der Bequemlichkeit und einfacheren Erneuerung sollten Sie mit dem verwendeten Plugin übereinstimmen.
Verwendung eines vorhandenen Webservers
Um Ihren bestehenden Webserver zu verwenden, stellen Sie sicher, dass er auf Port 80 läuft und lauscht, bevor Sie den folgenden Befehl ausführen
certbot certonly --webroot
Sie werden aufgefordert, neben anderen Informationen Ihren Domainnamen und den Pfad zu Ihrem Webroot einzugeben, der auf den meisten Linux-Systemen standardmäßig `/var/www/html/` lautet. Alternativ können Sie die erforderlichen Informationen als Befehlsargumente angeben. Zum Beispiel:
certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m your_email@example.com -d www.example.com
Verwendung des eigenständigen Web-Servers
Um den eigenständigen Server zu verwenden, stellen Sie zunächst die Verfügbarkeit von Port 80 sicher. Sie können auf alle Prozesse prüfen, die an diesen Port gebunden sind:
ss -lntp 'sport = 80'
Falls erforderlich, stoppen Sie den beanstandeten Dienst/Prozess, bevor Sie fortfahren. Dann geben Sie den Befehl:
certbot certonly --standalone
Sobald das Zertifikat ausgestellt ist, müssen Sie Ihren Webserver manuell konfigurieren. Die entsprechenden Dateien finden Sie in /etc/letsencrypt/live/your_domain.
Interaktive HTTPS-Installation
Wie bereits erwähnt, kann certbot den gesamten HTTPS-Einrichtungsprozess, einschließlich der Webserver-Konfiguration, automatisieren. Plugins sind sowohl für Apache als auch für Nginx verfügbar und müssen möglicherweise als separates Paket installiert werden. Installieren Sie das certbot-Plugin speziell für Ihren Webserver und führen Sie dann `certbot run –PLUGIN_NAME` aus. Wir werden den gesamten Prozess für Apache auf einem Debian-10-System demonstrieren. Der Prozess für Nginx ist ähnlich.
apt install -y python-certbot-apache certbot run --apache
Angenommen, Ihr Webserver ist bereits für Ihre(n) Domainnamen konfiguriert, analysiert certbot die bestehende Konfiguration und fordert Sie auf, zu wählen, für welche(n) Domainnamen HTTPS aktiviert werden soll. Wenn Ihr Webserver nicht konfiguriert ist oder wenn certbot Ihre(n) Domainnamen nicht erkennt, geben Sie Ihre(n) Domainnamen einfach manuell ein, wenn Sie dazu aufgefordert werden. Zum Beispiel:
Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: www.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1
Certbot erstellt eine neue Apache-Konfigurationsdatei für Ihren neuen virtuellen HTTPS-Host und fragt, ob HTTP-Verkehr auf HTTPS umgeleitet werden soll. Sofern Sie keine triftigen Gründe dagegen haben, sollten Sie die Umleitung auf HTTPS aktivieren.
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Enabled Apache rewrite module Redirecting vhost in /etc/apache2/sites-enabled/www.example.com.conf to ssl vhost in /etc/apache2/sites-available/www.example.com-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://www.example.com
Erneuerung von Zertifikaten
Manuelle Erneuerung
Um Ihre Zertifikate mit certbot zu erneuern, können Sie den Unterbefehl renew verwenden. Während der Erneuerung verwendet certbot dieselben Plugins und Optionen wie bei der ursprünglichen Ausgabe. Zertifikate werden nur dann erneuert, wenn sie in weniger als 30 Tagen ablaufen, so dass dieser Unterbefehl so oft wie gewünscht verwendet werden kann, da er nichts unternimmt, wenn die Zertifikate nicht in der Nähe ihres Ablaufdatums sind. Der Befehl ist einfach:
certbot renew
Wenn das eigenständige Plugin zur Ausstellung eines Zertifikats verwendet wurde, müssen Sie Ihren Webserver stoppen, damit die Erneuerung gelingen kann. Das können Sie mit Hilfe von Haken erreichen. Wenn das System beispielsweise Apache ausführt, lautet der Befehl:
certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"
Automatische Verlängerung
Viele Distributionen haben standardmäßig automatische Verlängerungen aktiviert, entweder über Systemzeitgeber oder Cron-Jobs. Mit können Sie nach Systemzeitgebern suchen:
systemctl list-timers
Und für Cron-Jobs verwenden:
ls /etc/cron*
Wenn das Webroot-Plugin für die Ausgabe verwendet wurde, sollten automatische Verlängerungen erfolgreich sein, solange Ihr Webserver läuft. Mit dem eigenständigen Plugin wird jedoch der standardmäßige automatische Erneuerungsbefehl fehlschlagen, wenn ein Webserver läuft, da certbot nicht in der Lage ist, sich an Port 80 zu binden. Es ist daher erforderlich, sie durch Hinzufügen von Haken, wie oben gezeigt, zu modifizieren.
Widerruf von Zertifikaten
Das Sperren eines Zertifikats kann durch die Angabe des Zertifikatspfads oder -namens erreicht werden:
certbot revoke --cert-name cert_name (OR) certbot revoke --cert-path /path/to/cert.pem
Zum Beispiel:
certbot revoke --cert-name www.example.net
Nach Ausführung des Unterbefehls „Widerruf“ fragt certbot, ob Zertifikatsdateien gelöscht werden sollen. Wenn Sie diese nicht löschen, wird das widerrufene Zertifikat beim nächsten Erneuerungsvorgang erneuert. Mehrere selbsterklärende Optionen können an den Unterbefehl „Widerruf“ übergeben werden:
- -Löschen-nach-Widerruf (fordert den Benutzer standardmäßig zur Auswahl auf)
- –no-delete-after-revoke (fordert den Benutzer standardmäßig zur Auswahl auf)
- -Grund [unbestimmt,Schlüsselkompromiss,Zugehörigkeit geändert,ersetzt,Einstellung der Tätigkeit] (Voreinstellung: nicht spezifiziert)
Wildcard-Zertifikate
Ein einzelnes Wildcard-Zertifikat kann zur Identifizierung mehrerer Subdomains verwendet werden, als Alternative zu separaten regulären Zertifikaten. Um ein Wildcard-Zertifikat zu erhalten, muss die DNS-01-Herausforderung verwendet werden. Während mehrere herstellerspezifische Plugins zur Verfügung stehen, die den ACME-Authentifizierungsprozess automatisieren, erläutern wir den manuellen, herstellerunabhängigen Prozess. Sie benötigen Zugang zu den Nameservern für Ihre Domain.
Verwenden Sie den folgenden Befehl, um ein Wildcard-Zertifikat anzufordern:
certbot certonly --manual --preferred-challenges dns-01 -d *.example.net
Certbot zeigt einen Wert an, der in einem DNS-TXT-Eintrag eingesetzt werden sollte. Dieser TXT-Datensatz dient als die notwendige Eigentumsvalidierung.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please deploy a DNS TXT record under the name _acme-challenge.example.net with the following value: y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcU Before continuing, verify the record is deployed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
Sie müssen den angegebenen Datensatz in Ihrem DNS-Bedienfeld erstellen, bevor Sie fortfahren können. Sobald der Datensatz erstellt ist, warten Sie einige Minuten, bevor Sie die Eingabetaste drücken, wodurch der ACME-Server zur Überprüfung des Datensatzes veranlasst wird. In einigen Fällen kann eine längere Wartezeit erforderlich sein, bis sich der neue Datensatz richtig verbreitet und zugänglich ist. Bei Erfolg werden das Zertifikat, die Kette und der private Schlüssel unter /etc/letsencrypt/live/example.com/ gespeichert.