So sichern Sie Nginx mit Let’s Encrypt unter Ubuntu 20.04

Einführung

Let’s Encrypt ist eine Zertifizierungsstelle (CA), die einen einfachen Weg bietet, kostenlose TLS/SSL-Zertifikate zu erhalten und zu installieren, um verschlüsseltes HTTPS auf Webservern zu ermöglichen. Sie vereinfacht den Prozess, indem sie einen Software-Client, Certbot, bereitstellt, der versucht, die meisten (wenn nicht alle) erforderlichen Schritte zu automatisieren. Der gesamte Prozess zum Erhalten und Installieren eines Zertifikats ist derzeit vollständig automatisiert sowohl für Apache als auch für Nginx.

In diesem Tutorial verwenden Sie Certbot, um ein kostenloses SSL-Zertifikat für Nginx unter Ubuntu 20.04 zu erhalten und Ihr Zertifikat so einzurichten, dass es automatisch erneuert wird.

In diesem Tutorial wird eine separate Nginx-Serverkonfigurationsdatei anstelle der Standarddatei verwendet. Wir empfehlen, neue Nginx-Serverblockdateien für jede Domain zu erstellen, da dies hilft, häufige Fehler zu vermeiden und die Standarddateien als Ersatzkonfiguration zu erhalten.

Lassen Sie DigitalOcean die Verwaltung von Nginx und Let’s Encrypt übernehmen. Die DigitalOcean App-Plattform ermöglicht es Ihnen, direkt von GitHub in Minuten bereitzustellen. Die App-Plattform übernimmt auch SSL-Zertifikate und Routing für Sie.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Ubuntu 20.04-Server, eingerichtet gemäß diesem Anleitung zum Einrichten eines Servers unter Ubuntu 20.04, einschließlich eines sudo-aktivierten Nicht-Root-Benutzers und einer Firewall.

  • Einen registrierten Domainnamen. In diesem Tutorial wird durchgehend example.com verwendet. Sie können einen Domainnamen von Namecheap erwerben, einen kostenlos von Freenom erhalten oder den Domain-Registrar Ihrer Wahl verwenden.

  • Beide der folgenden DNS-Einträge müssen für Ihren Server eingerichtet sein. Wenn Sie DigitalOcean verwenden, sehen Sie bitte unsere DNS-Dokumentation für Details zur Einrichtung.

    • Ein A-Eintrag mit example.com, der auf die öffentliche IP-Adresse Ihres Servers zeigt.
    • Ein A-Eintrag mit www.example.com, der auf die öffentliche IP-Adresse Ihres Servers zeigt.
  • Nginx wurde gemäß Anleitung zur Installation von Nginx unter Ubuntu 20.04 installiert. Stellen Sie sicher, dass Sie einen Serverblock für Ihre Domain haben. In diesem Tutorial wird /etc/nginx/sites-available/example.com als Beispiel verwendet.

Schritt 1 – Certbot installieren

Der erste Schritt zur Verwendung von Let’s Encrypt zum Erhalten eines SSL-Zertifikats besteht darin, die Certbot-Software auf Ihrem Server zu installieren.

Installieren Sie Certbot und das Nginx-Plugin mit apt:

  1. sudo apt install certbot python3-certbot-nginx

Certbot ist jetzt einsatzbereit, aber um SSL automatisch für Nginx zu konfigurieren, müssen wir einige der Nginx-Konfigurationen überprüfen.

Schritt 2 — Bestätigung der Nginx-Konfiguration

Certbot muss den richtigen server-Block in Ihrer Nginx-Konfiguration finden, um SSL automatisch konfigurieren zu können. Dies geschieht speziell, indem er nach einer server_name-Anweisung sucht, die mit der Domain übereinstimmt, für die Sie ein Zertifikat anfordern.

Wenn Sie den Serverblock gemäß dem Einrichtungsschritt im Nginx-Installations-Tutorial gefolgt sind, sollte ein Serverblock für Ihre Domain unter /etc/nginx/sites-available/example.com mit der server_name-Anweisung bereits entsprechend festgelegt sein.

Um dies zu überprüfen, öffnen Sie die Konfigurationsdatei für Ihre Domain mit nano oder Ihrem bevorzugten Texteditor:

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

Finden Sie die vorhandene server_name-Zeile. Sie sollte so aussehen:

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

Wenn dies der Fall ist, beenden Sie Ihren Editor und fahren Sie mit dem nächsten Schritt fort.

Wenn nicht, aktualisieren Sie es, um übereinzustimmen. Speichern Sie dann die Datei, beenden Sie Ihren Editor und überprüfen Sie die Syntax Ihrer Konfigurationsänderungen:

  1. sudo nginx -t

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

  1. sudo systemctl reload nginx

Jetzt kann Certbot den richtigen server-Block finden und ihn automatisch aktualisieren.

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

Schritt 3 – Zulassen von HTTPS durch die Firewall

Wenn Sie die ufw-Firewall aktiviert haben, wie in den Voraussetzungshinweisen empfohlen, müssen Sie die Einstellungen anpassen, um den HTTPS-Verkehr zuzulassen. Glücklicherweise registriert Nginx beim Installieren ein paar Profile mit ufw.

Sie können die aktuellen Einstellungen sehen, indem Sie Folgendes eingeben:

  1. sudo ufw status

Es wird wahrscheinlich so aussehen, 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 zusätzlich HTTPS-Verkehr zuzulassen, erlauben Sie das Nginx Full-Profil und löschen Sie die überflüssige Erlaubnis für das Nginx HTTP-Profil:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

Ihr Status sollte jetzt so aussehen:

  1. 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 — Erhalt eines SSL-Zertifikats

Certbot bietet verschiedene Möglichkeiten, SSL-Zertifikate über Plugins zu erhalten. Das Nginx-Plugin kümmert sich um die Neukonfiguration von Nginx und lädt die Konfiguration bei Bedarf neu. Verwenden Sie dieses Plugin, geben Sie Folgendes ein:

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

Dies führt certbot mit dem --nginx-Plugin aus und verwendet -d, um die Domainnamen anzugeben, für die das Zertifikat gültig sein soll.

Wenn dies das erste Mal ist, dass Sie certbot ausführen, werden Sie aufgefordert, eine E-Mail-Adresse einzugeben und den Nutzungsbedingungen zuzustimmen. Nachdem Sie dies getan haben, wird certbot mit dem Let’s Encrypt-Server kommunizieren und dann eine Herausforderung durchführen, um zu überprüfen, dass Sie die Kontrolle über die Domain haben, für die Sie ein Zertifikat beantragen.

Wenn das erfolgreich ist, wird certbot fragen, 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):

Wählen Sie Ihre Option aus und drücken Sie dann ENTER. Die Konfiguration wird aktualisiert und Nginx wird neu geladen, um die neuen Einstellungen zu übernehmen. certbot wird mit einer Nachricht abschließen, die Ihnen mitteilt, 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 sind heruntergeladen, installiert und geladen. Versuchen Sie, Ihre Website mit https:// neu zu laden, und beachten Sie das Sicherheitssymbol Ihres Browsers. Es sollte anzeigen, dass die Website ordnungsgemäß gesichert ist, normalerweise mit einem Schlosssymbol. Wenn Sie Ihren Server mit dem SSL Labs Server Test testen, erhält er eine A-Bewertung.

Beenden wir durch das Testen des Erneuerungsprozesses.

Schritt 5 — Überprüfung der Certbot-Automatisierung

Die Zertifikate von Let’s Encrypt sind nur neunzig Tage gültig. Dies soll Benutzer dazu ermutigen, ihren Zertifikaterneuerungsprozess zu automatisieren. Das von uns installierte certbot-Paket kümmert sich darum, indem es einen systemd-Timer hinzufügt, der zweimal täglich ausgeführt wird und automatisch jedes Zertifikat erneuert, das innerhalb von dreißig Tagen abläuft.

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

  1. 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 einen Testlauf mit certbot durchführen:

  1. sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie bereit. Bei Bedarf erneuert Certbot Ihre Zertifikate und lädt Nginx neu, um die Änderungen zu übernehmen. Wenn der automatisierte Erneuerungsprozess jemals fehlschlägt, sendet Let’s Encrypt eine Nachricht an die von Ihnen angegebene E-Mail-Adresse und warnt Sie, wenn Ihr Zertifikat kurz vor dem Ablauf steht.

Abschluss

In diesem Tutorial haben Sie den Let’s Encrypt-Client certbot installiert, SSL-Zertifikate für Ihre Domain heruntergeladen, Nginx konfiguriert, um diese Zertifikate zu verwenden, und die automatische Zertifikatserneuerung eingerichtet. Wenn Sie weitere Fragen zur Verwendung von Certbot haben, ist die offizielle Dokumentation ein guter Ausgangspunkt.

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