Tutorial

So sichern Sie Apache mit Let's Encrypt unter Ubuntu 20.04

ApacheLet's EncryptUbuntu 20.04

Einführung

Let’s Encrypt ist eine Zertifizierungsstelle (Certificate Authority, CA), die das Abrufen und Installieren von kostenlosen TLS-/SSL-Zertifikaten erleichtert und so verschlüsseltes HTTPS auf Webservern ermöglicht. Es vereinfacht den Prozess, indem ein Software-Client, Certbot, bereitgestellt wird, der versucht, die meisten (wenn nicht alle) der erforderlichen Schritte zu automatisieren. Derzeit ist der gesamte Prozess zum Abrufen und Installieren eines Zertifikats sowohl auf Apache als auch auf Nginx vollständig automatisiert.

In diesem Leitfaden verwenden wir Certbot, um ein kostenloses SSL-Zertifikat für Apache unter Ubuntu 20.04 zu erhalten, und stellen sicher, dass dieses Zertifikat so eingerichtet ist, dass es automatisch erneuert wird.

In diesem Tutorial wird anstelle der Standardkonfigurationsdatei von Apache eine separate virtuelle Hostdatei zum Einrichten der Website verwendet, die von Let’s Encrypt gesichert wird. Wir empfehlen, neue virtuelle Apache-Hostdateien für jede auf einem Server gehostete Domäne zu erstellen, da dies dazu beiträgt, häufige Fehler zu vermeiden und die Standardkonfigurationsdateien als Fallback-Setup beizubehalten.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

  • Einen Ubuntu 20.04-Server, der gemäß dem Tutorial Ersteinrichtung des Servers für Ubuntu 20.04 eingerichtet wurde, einschließlich eines sudo non-root users und einer Firewall.

  • Einen vollständig registrierten Domänennamen. In diesem Tutorial wird your_domain durchgehend als Beispiel verwendet. Sie können einen Domänennamen unter Namecheap günstig erwerben oder einen kostenlosen von Freenom herunterladen,. oder einfach die Domänenregistrierngsstelle Ihrer Wahl verwenden.

  • Die beiden folgenden DNS-Einträge wurden für Ihren Server eingerichtet. Sie finden in dieser Einführung in DigitalOcean DNS Details dazu, wie Sie sie hinzufügen können.

    • Einen A-Datensatz mit your-domain, der auf die öffentliche IP-Adresse Ihres Servers verweist.
    • Einen A-Datensatz mit your-domain, der auf die öffentliche IP-Adresse Ihres Servers verweist.
  • Apache gemäß Installieren von Apache unter Ubuntu 20.04 installiert. Stellen Sie sicher, dass Sie eine virtuelle Hostdatei für Ihre Domäne haben. In diesem Tutorial wird /etc/apache2/sites-available/your_domain.conf als Beispiel verwendet.

Schritt 1 — Installieren von Certbot

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

Wir benötigen zwei Pakete: certbot und python3-certbot-apache. Letzteres ist ein Plugin, das Certbot in Apache integriert und ermöglicht, das Abrufen eines Zertifikats und das Konfigurieren von HTTPS auf Ihrem Webserver mit einem einzigen Befehl zu automatisieren.

  • sudo apt install certbot python3-certbot-apache

Außerdem werden Sie zur Bestätigung der Installation aufgefordert, indem Sie Y und dann ENTER drücken.

Certbot ist jetzt auf Ihrem Server installiert. Im nächsten Schritt verifizieren wir die Konfiguration von Apache, um sicherzustellen, dass Ihr virtueller Host angemessen festgelegt ist. Dadurch wird sichergestellt, dass das Certbot-Client-Skript Ihre Domänen erkennen und Ihren Webserver so konfigurieren kann, dass Ihr neu generiertes SSL-Zertifikat automatisch verwendet wird.

Schritt 2 — Überprüfen Ihrer Apache Virtual Host-Konfiguration

Um SSL für Ihren Webserver automatisch abrufen und konfigurieren zu können, muss Certbot den richtigen virtuellen Host in Ihren Apache-Konfigurationsdateien finden. Ihre Serverdomänennamen werden aus den Anweisungen ServerName und ServerAlias abgerufen, die in Ihrem VirtualHost-Konfigurationsblock definiert sind.

Wenn Sie den Schritt zum Einrichten des virtuellen Hosts im Tutorial zur Apache-Installation ausgeführt haben, sollten Sie einen VirtualHost-Block für Ihre Domäne unter /etc/apache2/sites-available/your_domain.conf mit dem ServerName und auch den ServerAlias-Anweisungen, die bereits entsprechend festgelegt wurden, einrichten.

Um dies zu überprüfen, öffnen Sie die virtuelle Hostdatei für Ihre Domäne mit nano oder Ihrem bevorzugten Texteditor:

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

Suchen Sie die bestehenden Zeilen ServerName und ServerAlias. Sie sollten wie folgt aussehen:

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

Wenn Sie Ihren ServerName und Ihre ServerAlias bereits so eingerichtet haben, können Sie Ihren Texteditor beenden und mit dem nächsten Schritt fortfahren. Wenn Sie nano verwenden, können Sie zum Beenden STRG+X drücken, dann Y und ENTER, um zu bestätigen.

Wenn Ihre aktuelle virtuelle Hostkonfiguration nicht dem Beispiel entspricht, aktualisieren Sie sie entsprechend. Wenn Sie fertig sind, speichern Sie die Datei und beenden Sie den Editor. Führen Sie dann den folgenden Befehl aus, um Ihre Änderungen zu validieren:

  • sudo apache2ctl configtest

Sie sollten eine Syntax OK als Antwort erhalten. Wenn Sie einen Fehler erhalten, öffnen Sie die virtuelle Hostdatei und überprüfen Sie sie auf Schreibfehler oder fehlende Zeichen. Sobald die Syntax Ihrer Konfigurationsdatei korrekt ist, laden Sie Apache neu, sodass die Änderungen wirksam werden:

  • sudo systemctl reload apache2

Mit diesen Änderungen kann Certbot den richtigen VirtualHost-Block finden und ihn aktualisieren.

Als Nächstes aktualisieren wir die Firewall, um den HTTPS-Datenverkehr zu ermöglichen.

Schritt 3 — Zulassen von HTTPS durch die Firewall

Wenn Sie die UFW-Firewall aktiviert haben, wie in den erforderlichen Anleitungen empfohlen, müssen Sie die Einstellungen anpassen, um den HTTPS-Datenverkehr zuzulassen. Bei der Installation registriert Apache einige verschiedene UFW-Anwendungsprofile. Wir können das Profil Apache Full nutzen, um sowohl HTTP- als auch HTTPS-Datenverkehr auf Ihrem Server zuzulassen.

Um zu verifizieren, welche Art von Datenverkehr derzeit auf Ihrem Server erlaubt ist, können Sie Folgendes verwenden:

  • sudo ufw status

Wenn Sie einem unserer Apache-Installationsleitfäden gefolgt sind, sollte Ihre Ausgabe ungefähr so aussehen, was bedeutet, dass derzeit nur HTTP-Datenverkehr auf Port 80 zulässig ist:

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

Um zusätzlich den HTTPS-Datenverkehr einzulassen, lassen Sie das Profil „Apache Full“ zu und löschen Sie das redundante Profil „Apache“:

  • sudo ufw allow 'Apache Full'
  • sudo ufw delete allow 'Apache'

Ihr Status sieht nun wie folgt aus:

  • 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 können nun Certbot ausführen und Ihre Zertifikate abrufen.

Schritt 4 — Abrufen eines SSL-Zertifikats

Certbot bietet eine Vielzahl von Möglichkeiten, um SSL-Zertifikate über Plugins zu erhalten. Das Apache-Plugin kümmert sich um die Neukonfiguration von Apache und das Neuladen der Konfiguration bei Bedarf. Geben Sie Folgendes ein, um dieses Plugin zu verwenden:

  • sudo certbot --apache

In diesem Skript müssen Sie eine Reihe von Fragen beantworten, um Ihr SSL-Zertifikat zu konfigurieren. Zunächst werden Sie nach einer gültigen E-Mail-Adresse gefragt. Diese E-Mail wird für Erneuerungsbenachrichtigungen und Sicherheitshinweise verwendet:

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

Nach dem Bereitstellen einer gültigen E-Mail-Adresse drücken Sie ENTER, um mit dem nächsten Schritt fortzufahren. Sie werden dann aufgefordert, zu bestätigen, ob Sie den Nutzungsbedingungen von Let’s Encrypt zustimmen. Sie können dies bestätigen, indem Sie A drücken und dann ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Als Nächstes werden Sie gefragt, ob Sie Ihre E-Mail mit der Electronic Frontier Foundation teilen möchten, um Nachrichten und andere Informationen zu erhalten. Wenn Sie ihren Inhalt nicht abonnieren möchten, geben Sie N ein. Andernfalls geben Sie Y ein. Drücken Sie anschließend ENTER, um mit dem nächsten Schritt fortzufahren.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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

Im nächsten Schritt werden Sie aufgefordert, Certbot darüber zu informieren, für welche Domänen Sie HTTPS aktivieren möchten. Die aufgelisteten Domänennamen werden automatisch aus Ihrer Konfiguration des virtuellen Apache-Hosts abgerufen. Aus diesem Grund müssen Sie sicherstellen, dass auf Ihrem virtuellen Host die richtigen Einstellungen für ServerName und ServerAlias konfiguriert sind. Wenn Sie HTTPS für alle aufgelisteten Domänennamen aktivieren möchten (empfohlen), können Sie die Eingabeaufforderung leer lassen und ENTER drücken, um fortzufahren. Wählen Sie andernfalls die Domänen aus, für die Sie HTTPS aktivieren möchten, indem Sie die entsprechende Nummer durch Kommas und/oder Leerzeichen getrennt auflisten 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):

Die Ausgabe sieht dann so aus:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

Als Nächstes werden Sie aufgefordert, auszuwählen, ob der HTTP-Datenverkehr an HTTPS umgeleitet werden soll. In der Praxis bedeutet dies, dass jemand, der Ihre Website über unverschlüsselte Kanäle (HTTP) besucht, automatisch an die HTTPS-Adresse Ihrer Website umgeleitet wird. Wählen Sie 2, um die Umleitung zu aktivieren, oder 1, wenn Sie sowohl HTTP als auch HTTPS als separate Methoden für den Zugriff auf Ihre Website beibehalten möchten.

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

Nach diesem Schritt ist die Konfiguration von Certbot abgeschlossen, und Sie erhalten die letzten Anmerkungen zu Ihrem neuen Zertifikat, wo sich die generierten Dateien befinden und wie Sie Ihre Konfiguration mit einem externen Tool testen können, das die Authentizität Ihres Zertifikats analysiert:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - 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
   Your cert will expire on 2020-07-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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 die Konfiguration von Apache geladen. Versuchen Sie, Ihre Website mit https:// neu zu laden und beachten Sie den Sicherheitsindikator Ihres Browsers. Er sollte darauf hinweisen, dass Ihre Website ordnungsgemäß gesichert ist, normalerweise durch Einfügen eines Schlosssymbols in die Adressleiste.

Mit dem SSL Labs Server-Test können Sie die Note Ihres Zertifikats überprüfen und detaillierte Informationen dazu aus der Sicht eines externen Dienstes abrufen.

Im nächsten und letzten Schritt testen wir die automatische Erneuerungsfunktion von Certbot, die garantiert, dass Ihr Zertifikat vor dem Ablaufdatum automatisch erneuert wird.

Schritt 5 - Überprüfen der automatischen Erneuerung von Certbot

Zertifikate von Let’s Encrypt sind nur neunzig Tage gültig. Dies soll Benutzer dazu ermutigen, ihren Prozess zur Erneuerung von Zertifikaten zu automatisieren und sicherzustellen, dass missbrauchte Zertifikate oder gestohlene Schlüssel eher früher als später ablaufen.

Das von uns installierte certbot-Paket kümmert sich um Erneuerungen, indem es ein Erneuerungsskript in /etc/cron.d einfügt, das von einem systemctl-Dienst namens certbot.timer verwaltet wird. Dieses Skript wird zweimal pro Tag ausgeführt und erneuert automatisch alle Zertifikate, die innerhalb von dreißig Tagen ablaufen.

Um den Status dieses Dienstes zu überprüfen und sicherzustellen, dass er aktiv ist und ausgeführt wird, können Sie Folgendes verwenden:

  • sudo systemctl status certbot.timer

Sie sehen eine Ausgabe, die dieser ähnelt:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

Um den Erneuerungsprozess zu testen, können Sie mit certbot einen Probelauf durchführen:

  • sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie fertig. Bei Bedarf erneuert Certbot Ihre Zertifikate und lädt Apache neu, um die Änderungen zu übernehmen. Wenn der automatische Erneuerungsprozess jemals fehlschlägt, sendet Let’s Encrypt eine Nachricht an die von Ihnen angegebene E-Mail und warnt Sie, wenn Ihr Zertifikat bald abläuft.

Zusammenfassung

In diesem Lernprogramm haben Sie den Let’s Encrypt-Client Certbot installiert, ein SSL-Zertifikat für Ihre Domäne konfiguriert und installiert und bestätigt, dass der automatische Erneuerungsdienst von Certbot in systemctl aktiv ist. Wenn Sie weitere Fragen zur Verwendung von Certbot haben, ist die Dokumentation ein guter Ausgangspunkt.

0 Comments

Creative Commons License