Tutorial

Sichern von Nginx mit Let's Encrypt unter Ubuntu 20.04

NginxUbuntuSecurityUbuntu 20.04

Einführung

Let´s Encrypt ist eine Zertifizierungsstelle (CA), die eine einfache Möglichkeit bietet, kostenlose TLS/SSL-Zertifikate zu erhalten und zu installieren. Dadurch können Sie die verschlüsselten HTTPS auf Webservern bereitstellen. 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 Tutorial nutzen Sie Certbot, um ein kostenloses SSL-Zertifikat für Nginx auf Ubuntu 20.04 zu erhalten und Ihr Zertifikat so einzurichten, dass es automatisch erneuert wird.

Dieses Tutorial verwendet eine separate Nginx Serverkonfiguration anstelle der Standarddatei. Wir empfehlen die Erstellung neuer Nginx-Serverblockdateien für jede Domäne, da so häufige Fehler vermieden werden können und die Standarddateien als Fallback-Konfiguration erhalten bleiben.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

  • Ein Ubuntu 20.04-Server, der gemäß dem Tutorial Ersteinrichtung des Servers für Ubuntu 20.04 eingerichtet wurde, einschließlich eines Nicht-root-Benutzers mit sudo-Berechtigung und einer Firewall.

  • Einen registrierten Domänennamen. In diesem Tutorial wird durchgehend example.com genutzt. Sie können einen Domänennamen unter Namecheap erwerben oder einen kostenlosen von Freenom herunterladen oder einfach die Domänenregistrierungsstelle Ihrer Wahl verwenden.

  • Die beiden folgenden DNS-Einträge für Ihren Server eingerichtet. Wenn Sie DigitalOcean verwenden, lesen Sie bitte unsere DNS Dokumentation für Details, wie Sie sie hinzufügen.

    • Ein A-Datensatz mit example.com mit Verweis auf die öffentliche IP-Adresse Ihres Servers.
    • Ein A-Datensatz mit www.example.com, der auf die öffentliche IP-Adresse Ihres Servers verweist.
  • Nginx wird gemäß Installieren von Nginx unter Ubuntu 20.04 installiert. Stellen Sie sicher, dass Sie für Ihre Domäne einen Serverblock haben. In diesem Tutorial nutzen wir /etc/nginx/sites-available/example.com als Beispiel.

Schritt 1 — Installieren von Certbot

Der erste Schritt zur Nutzung von Let’s Encrypt, um ein SSL-Zertifikat zu erhalten, ist die Installation der Certbot-Software auf Ihrem Server.

Installieren Sie Certbot und das Nginx Plugin mit apt:

  • sudo apt install certbot python3-certbot-nginx

Certbot ist nun einsatzbereit, aber damit SSL für Nginx damit automatisch konfiguriert werden kann, müssen wir einige Bereiche der Nginx-Konfiguration überprüfen.

Schritt 2 — Bestätigen der Nginx-Konfiguration

Certbot muss in Ihrer Nginx-Konfiguration den richtigen Serverblock finden können, damit SSL automatisch konfiguriert werden kann. Dazu hält er nach einer server_name-Anweisung Ausschau, die zur Domäne passt, für die Sie ein Zertifikat anfordern.

Wenn Sie den Schritt zur Einrichtung des Serverblocks im Nginx Installations-Tutorial befolgt haben, sollten Sie einen Serverblock für Ihre Domäne unter /etc/nginx/sites-available/example.com mit der Anweisung server_name haben, der bereits entsprechend eingerichtet wurde.

Um dies zu überprüfen, öffnen Sie die Konfigurationsdatei für Ihre Domäne mit nano oder einem anderen Texteditor:

  • sudo nano /etc/nginx/sites-available/example.com

Suchen Sie nach der Zeile server_name. Das sollte wie folgt aussehen:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

Wenn Sie sie gefunden haben, schließen Sie den Editor und fahren Sie mit dem nächsten Schritt fort.

Sollten Sie sie nicht finden, aktualisieren Sie entsprechend. Speichern Sie dann die Datei, beenden Sie den Editor und überprüfen Sie die Syntax Ihrer Konfigurationsbearbeitungen:

  • sudo nginx -t

Wenn Sie einen Fehler erhalten, öffnen Sie die Serverblockdatei und überprüfen Sie sie auf Schreibfehler oder fehlende Zeichen. Sobald die Syntax Ihrer Konfigurationsdatei korrekt ist, laden Sie Nginx neu, um die neue Konfiguration zu laden:

  • sudo systemctl reload nginx

Certbot kann nun den richtigen Serverblock finden und automatisch 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 im Leitfaden zu den Voraussetzungen empfohlen, müssen Sie die Einstellungen so anpassen, dass Sie den HTTPS-Datenverkehr zulassen. Praktischerweise registriert Nginx einige Profile mit ufw bei der Installation.

Sie können die aktuelle Einstellung sehen, indem Sie Folgendes eingeben:

  • sudo ufw status

Sie sieht wahrscheinlich etwa so aus, was bedeutet, dass nur HTTP-Verkehr zum Webserver zugelassen ist:

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

Um den HTTPS-Verkehr zu ermöglichen, erlauben Sie das Nginx Full Profil und löschen Sie die Zulassung des redundanten Nginx HTTP Profils:

  • sudo ufw allow 'Nginx Full'
  • sudo ufw delete allow 'Nginx HTTP'

Ihr Status sollte nun wie folgt aussehen:

  • sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Als Nächstes führen wir Certbot aus und holen unsere Zertifikate ab.

Schritt 4 — Abrufen eines SSL-Zertifikats

Certbot bietet eine Vielzahl von Möglichkeiten, um SSL-Zertifikate über Plugins zu erhalten. Das Nginx-Plugin übernimmt die Neukonfiguration von Nginx und das Neuladen der Konfiguration, wenn nötig. Geben Sie Folgendes ein, um dieses Plugin zu verwenden:

  • sudo certbot --nginx -d example.com -d www.example.com

Damit wird Certbot mit dem --nginx Plugin ausgeführt, wobei über -d die Domänennamen angegeben werden, für die das Zertifikat gültig sein soll.

Wenn Sie Certbot zum ersten Mal ausführen, werden Sie aufgefordert, eine E-Mail-Adresse einzugeben und die Bedingungen des Dienstes zu akzeptieren. Danach kommuniziert Certbot mit dem Let’s Encrypt-Server und stellt dann anhand einer Prüfung sicher, dass Sie die Domäne, für die Sie das Zertifikat anfordern, auch kontrollieren.

Nach erfolgreicher Überprüfung fragt Certbot, wie Sie Ihre HTTPS-Einstellungen konfigurieren möchten.

Output
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):

Treffen Sie Ihre Wahl und drücken Sie dann ENTER. Die Konfiguration wird aktualisiert und Nginx zum Abholen der neuen Einstellungen neu geladen. Certbot schließt mit einer Mitteilung, dass der Prozess erfolgreich war und wo Ihre Zertifikate gespeichert sind:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. 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" - 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

Ihre Zertifikate werden heruntergeladen, installiert und geladen. Versuchen Sie, Ihre Website mit https:// neu zu laden und beachten Sie den Sicherheitsindikator Ihres Browsers. Es sollte angezeigt werden, dass die Seite ordnungsgemäß gesichert ist. Meist sieht man das an einem Schloss-Symbol. Wenn Sie Ihren Server mit dem SSL Labs Server Test testen, erhält er eine A-Bewertung.

Wir wollen abschließend den Erneuerungsvorgang testen.

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

Zertifikate von Let’s Encrypt sind nur neunzig Tage gültig. Das soll Benutzer dazu ermutigen, die Erneuerung ihrer Zertifikate zu automatisieren. Das Certbot-Paket, das wir installiert haben, übernimmt diese Aufgabe für uns und fügt hierfür einen systemd Timer hinzu, der sicherstellt, dass sie zweimal täglich ausgeführt wird und jedes Zertifikat automatisch nach dreißig Tagen erneuert wird.

Sie können den Status des Timers mit systemctl abfragen:

  • sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

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 Nginx 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 Tutorial haben Sie den Let’s Encrypt-Client Certbot installiert, SSL-Zertifikate für Ihre Domäne heruntergeladen, Nginx so konfiguriert, dass es diese Zertifikate verwendet und die automatische Zertifikatserneuerung eingerichtet. Wenn Sie weitere Fragen zur Verwendung von Certbot haben, ist die Dokumentation ein guter Ausgangspunkt.

Creative Commons License