Wie man Apache mit Let’s Encrypt auf Ubuntu sichert

Lets Encrypt ist eine Zertifizierungsstelle (CA), die das Erwerb und die Installation kostenloser TLS/SSL-Zertifikate erleichtert und damit den Einsatz von verschlüsseltem HTTPS auf Web-Servern ermöglicht. Es vereinfacht den Prozess durch Bereitstellung eines Software-Clients, Certbot, der versucht, die meisten (wenn nicht alle) erforderlichen Schritte zu automatisieren. Derzeit ist der gesamte Prozess des Erhalts und der Installation eines Zertifikats auf Apache und Nginx vollständig automatisiert.

In dieser Anleitung werden Sie Certbot verwenden, um ein kostenloses SSL-Zertifikat für Apache unter Ubuntu zu erwerben und sicherzustellen, dass dieses Zertifikat automatisch erneuert wird.

Dieses Tutorial verwendet eine separate virtuelle Host-Datei anstelle der Standardkonfigurationsdatei von Apache, um die Website zu konfigurieren, die durch Let’s Encrypt gesichert werden soll. Wir empfehlen, für jede auf einem Server gehostete Domain neue Apache-Virtuelle-Host-Dateien zu erstellen, da dies hilft, häufige Fehler zu vermeiden und die Standardkonfigurationsdateien als Rückfall-Setup beizubehalten.

So sichern Sie Apache mit Let’s Encrypt auf Ubuntu

  1. Installation von Certbot
  2. Überprüfung Ihrer Apache-Virtuellen-Host-Konfiguration
  3. HTTPS durch die Firewall zulassen
  4. Eine SSL-Zertifikat erhalten
  5. Überprüfung des automatischen Erneuerungs von Certbot

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu-Server, der mit einem nicht-root-Benutzer mit sudo-Verwaltungsrechten und aktiviertem Firewall eingerichtet ist. Sie können dies durch folgen des我们的 initial server setup for Ubuntu-Tutorials einrichten.

  • Ein vollständig registrierter Domänenname. Dieses Tutorial verwendet your_domain als Beispiel. Sie können einen Domänennamen bei Namecheap kaufen, einen kostenlos bei Freenom erhalten oder Ihren bevorzugten Domain-Registrierungsunternehmer verwenden.

  • Beide folgenden DNS-Einträge für Ihren Server einrichten. Weitere Informationen darüber, wie Sie sie hinzufügen können, finden Sie in der Einführung in die DigitalOcean DNS.

    • Ein A-Eintrag mit Ihre_Domain, der auf die öffentliche IP-Adresse Ihres Servers verweist.
    • Ein A-Eintrag mit www.Ihre_Domain, der auf die öffentliche IP-Adresse Ihres Servers verweist.
  • Apache wurde gemäß der Anleitung Wie man Apache auf Ubuntu installiert installiert. Stellen Sie sicher, dass Sie eine virtuelle Host-Datei für Ihre Domain haben. In dieser Anleitung wird als Beispiel /etc/apache2/sites-available/Ihre_Domain.conf verwendet.

Schritt 1 — Installation von Certbot

Um ein SSL-Zertifikat mit Let’s Encrypt zu erhalten, müssen Sie die Certbot-Software auf Ihrem Server installieren. Sie werden dafür die Standard-Ubuntu-Paketrepositories verwenden.

Zuerst aktualisieren Sie den lokalen Paketindex:

  1. sudo apt update

Sie benötigen zwei Pakete: certbot und python3-certbot-apache. Letzteres ist ein Plugin, das Certbot mit Apache integriert und es ermöglicht, ein Zertifikat zu erhalten und HTTPS in Ihrem Webserver mit einem einzigen Befehl zu konfigurieren:

  1. sudo apt install certbot python3-certbot-apache

Sie werden aufgefordert, die Installation durch Drücken von Y und dann ENTER zu bestätigen.

Certbot ist nun auf Ihrem Server installiert. Im nächsten Schritt werden Sie die Apache-Konfiguration überprüfen, um sicherzustellen, dass Ihr virtueller Host angemessen eingestellt ist. Dies sollte sicherstellen, dass das certbot-Client Skript Ihre Domains erkennen und Ihren Web-Server automatisch neukonfigurieren kann, um Ihr neu generiertes SSL-Zertifikat zu verwenden.

Schritt 2 — Überprüfung Ihrer Apache-Virtuellen Host-Konfiguration

Um das SSL automatisch zu erhalten und den Web-Server zu konfigurieren, braucht Certbot es, den richtigen virtuellen Host innerhalb Ihrer Apache-Konfigurationsdateien zu finden. Ihren Server-Domänennamen(n) wird(n) aus den ServerName– und ServerAlias-Direktiven definiert, die innerhalb Ihres VirtualHost-Konfigurationsblocks stehen.

Wenn Sie den Schritt zur Virtual Host-Einrichtung im Apache-Installations-Leitfaden befolgt haben, sollten Sie einen VirtualHost-Block für Ihre Domäne unter /etc/apache2/sites-available/Ihre_Domain.conf eingerichtet haben, mit den ServerName– und auch den ServerAlias-Direktiven, die bereits angemessen eingestellt sind.

Um dies zu bestätigen, öffnen Sie die virtuelle Host-Datei für Ihre Domäne mit nano oder Ihrem bevorzugten Text-Editor:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Finden Sie die existierenden Zeilen für ServerName und ServerAlias. Sie sollten wie folgt aufgelistet sein:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Wenn Sie bereits Ihre ServerName und ServerAlias auf diese Weise eingerichtet haben, können Sie den Texteditor verlassen und mit dem nächsten Schritt fortfahren. Wenn Ihre aktuelle Virtual Host-Konfiguration nicht dem Beispiel entspricht, aktualisieren Sie sie entsprechend. Wenn Sie nano verwenden, können Sie durch Drücken von STRG+X, dann Y und ENTER Ihre Änderungen bestätigen und den Editor verlassen. Dann führen Sie den folgenden Befehl aus, um Ihre Änderungen zu validieren:

  1. sudo apache2ctl configtest

Sie sollten als Antwort Syntax OK erhalten. Wenn Sie einen Fehler erhalten, öffnen Sie die Virtual Host-Datei erneut und überprüfen Sie auf Tippfehler oder fehlende Zeichen. Sobald die Syntax Ihrer Konfigurationsdatei korrekt ist, laden Sie Apache neu, damit die Änderungen wirksam werden:

  1. sudo systemctl reload apache2

Mit diesen Änderungen wird Certbot in der Lage sein, den korrekten VirtualHost-Block zu finden und zu aktualisieren.

Als nächstes aktualisieren Sie die Firewall, um HTTPS-Verkehr zuzulassen.

Schritt 3 — HTTPS-Verkehr durch die Firewall zulassen

Wenn Sie die UFW-Firewall aktiviert haben, wie es in den Voraussetzungsanleitungen empfohlen wird, müssen Sie die Einstellungen anpassen, um HTTPS-Verkehr zuzulassen. Bei der Installation registriert Apache mehrere verschiedene UFW-Anwendung-Profilen. Sie können das Apache Full-Profil nutzen, um sowohl HTTP- als auch HTTPS-Verkehr auf Ihrem Server zuzulassen.

Um zu überprüfen, welcher Art der Traffic aktuell auf Ihrem Server zugelassen ist, sollten Sie den Status überprüfen:

  1. sudo ufw status

Wenn Sie einer unserer Apache-Installationsanleitungen gefolgt sind, werden Sie eine Ausgabe ähnlich der folgenden erhalten, was bedeutet, dass nur HTTP-Traffic auf Port 80 zugelassen ist:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

Um HTTPS-Traffic zuzulassen, sollten Sie das „Apache Vollständig“-Profil zulassen:

  1. sudo ufw allow 'Apache Full'

Entfernen Sie anschließend das überflüssige „Apache“-Profil:

  1. sudo ufw delete allow 'Apache'

Ihr Status wird wie folgt angezeigt:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

Sie sind nun bereit, Certbot zu verwenden und Ihre Zertifikate zu erhalten.

Schritt 4 — Erhalten eines SSL-Zertifikats

Certbot bietet verschiedene Möglichkeiten, SSL-Zertifikate über Plugins zu erhalten. Der Apache-Plugin wird dafür Sorgen tragen, Apache neu zu konfigurieren und die Konfiguration immer dann neu zu laden, wenn es notwendig ist. Um dieses Plugin zu verwenden, führen Sie Folgendes aus:

  1. sudo certbot --apache

Dieses Skript wird Sie dazu auffordern, eine Reihe von Fragen zu beantworten, um Ihr SSL-Zertifikat zu konfigurieren. Zunächst fragt es nach einer gültigen E-Mail-Adresse. Diese E-Mail-Adresse wird für Erneuerungsbenachrichtigungen und Sicherheitsmeldungen verwendet:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

Nachdem Sie eine gültige E-Mail-Adresse angegeben haben, drücken Sie die ENTER-Taste, um zum nächsten Schritt fortzufahren. Daraufhin werden Sie gefragt, ob Sie mit den Servicebedingungen von Let’s Encrypt einverstanden sind. Sie können dies durch Drücken der Taste Y und anschließend der ENTER-Taste bestätigen:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Als nächstes werden Sie gefragt, ob Sie Ihre E-Mail-Adresse an die Electronic Frontier Foundation weitergeben möchten, um Nachrichten und andere Informationen zu erhalten. Wenn Sie nicht möchten, dass Sie Inhalte abonnieren, schreiben Sie N. Andernfalls schreiben Sie Y und drücken Sie dann ENTER, um zum nächsten Schritt zu gelangen:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

Der nächste Schritt fordert Sie auf, Certbot mitzuteilen, für welche Domains Sie HTTPS aktivieren möchten. Die aufgelisteten Domainnamen werden automatisch aus Ihrer Apache-Virtuellen-Host-Konfiguration abgerufen, daher ist es wichtig, sicherzustellen, dass Sie die richtigen ServerName– und ServerAlias-Einstellungen in Ihrem Virtuellen Host konfiguriert haben. Wenn Sie HTTPS für alle aufgelisteten Domainnamen aktivieren möchten (empfohlen), können Sie die Eingabeaufforderung leer lassen und ENTER drücken, um fortzufahren. Andernfalls wählen Sie die Domains aus, für die Sie HTTPS aktivieren möchten, indem Sie jede entsprechende Nummer auflisten, getrennt durch Kommata und/ oder Leerzeichen, und dann ENTER drücken:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

Nach diesem Schritt ist die Konfiguration von Certbot abgeschlossen, und Sie erhalten die abschließenden Bemerkungen zu Ihrem neuen Zertifikat und dem Ort der generierten Dateien:

Output
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Ihr Zertifikat ist nun installiert und in der Konfiguration von Apache geladen. Versuchen Sie, Ihre Website mit https:// neu zu laden und beachten Sie das Sicherheitsindikator Ihres Browsers. Dies sollte darauf hinweisen, dass Ihre Website ordnungsgemäß gesichert ist, typischerweise durch ein Schlosssymbol in der Adressleiste.

Sie können den SSL Labs Server Test verwenden, um die Note Ihres Zertifikats zu überprüfen und detaillierte Informationen darüber zu erhalten, von der Perspektive eines externen Dienstes.

Im nächsten und letzten Schritt werden Sie die Auto-Verlängerungsfunktion von Certbot testen, die gewährleistet, dass Ihr Zertifikat automatisch vor dem Ablaufdatum erneuert wird.

Schritt 5 — Überprüfung der Auto-Verlängerung von Certbot

Let’s Encrypt-Zertifikate sind nur für neunzig Tage gültig. Dies soll Benutzer dazu anregen, ihren Zertifikatverlängerungsprozess zu automatisieren, sowie sicherstellen, dass missbrauchte Zertifikate oder gestohlene Schlüssel eher als später ablaufen.

Das Paket certbot, das Sie installiert haben, kümmert sich um die Verlängerungen, indem es ein Verlängerungsskript in /etc/cron.d einfügt, das von einem systemctl-Dienst namens certbot.timer verwaltet wird. Dieses Skript wird zweimal täglich ausgeführt und verlängert automatisch jedes Zertifikat, das innerhalb von dreißig Tagen abläuft.

Um den Status dieses Dienstes zu überprüfen und sicherzustellen, dass er aktiv ist, führen Sie die folgenden Befehl aus:

  1. sudo systemctl status certbot.timer

Ihre Ausgabe wird ähnlich der folgenden sein:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

Um den Verlängerungsprozess zu testen, können Sie eine Trockenlauf mit certbot durchführen:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Wenn Sie keine Fehler erhalten, sind Sie fertig. Wenn nötig, wird Certbot Ihre Zertifikate verlängern und Apache neu laden, um die Änderungen zu übernehmen. Wenn der automatische Verlängerungsprozess jemals fehlschlägt, sendet Let’s Encrypt eine Nachricht an die von Ihnen angegebene E-Mail-Adresse und warnt Sie, bevor Ihr Zertifikat abläuft.

Schlussfolgerung

In diesem Tutorial haben Sie den Let’s Encrypt Client certbot installiert, einen SSL-Zertifikat für Ihre Domain konfiguriert und installiert und bestätigt, dass der automatische Erneuerungsdienst von Certbot innerhalb von systemctl aktiv ist. Wenn Sie weitere Fragen zu der Verwendung von Certbot haben, ist ihre Dokumentation ein guter Ausgangspunkt.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu