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

Eine frühere Version dieses Tutorials wurde vonHazel Virdó geschrieben

Einführung

Let's Encrypt ist eine Zertifizierungsstelle (Certificate Authority, CA), die eine einfache Möglichkeit bietet, kostenloseTLS/SSL certificates zu erhalten und zu installieren, wodurch verschlüsseltes HTTPS auf Webservern aktiviert wird. 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 auf Apache und Nginx vollständig automatisiert.

In diesem Tutorial verwenden Sie Certbot, um ein kostenloses SSL-Zertifikat für Nginx unter Ubuntu 18.04 zu erhalten und Ihr Zertifikat für die automatische Verlängerung einzurichten.

In diesem Lernprogramm wird anstelle der Standarddatei eine separate Nginx-Serverblockdatei verwendet. We recommenderstellt neue Nginx-Serverblockdateien für jede Domäne, da dies dazu beiträgt, häufige Fehler zu vermeiden und die Standarddateien als Fallback-Konfiguration beizubehalten.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu 18.04-Server, der gemäß dem Tutorial voninitial server setup for Ubuntu 18.04eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.

  • Ein vollständig registrierter Domainname. In diesem Tutorial werden durchgehendexample.com verwendet. Sie können einen Domain-Namen fürNamecheap kaufen, einen fürFreenom kostenlos erhalten oder den Domain-Registrar Ihrer Wahl verwenden.

  • Die beiden folgenden DNS-Einträge wurden für Ihren Server eingerichtet. Sie könnenthis introduction to DigitalOcean DNS folgen, um Details zum Hinzufügen zu erhalten.

    • Ein A-Datensatz mitexample.com, der auf die öffentliche IP-Adresse Ihres Servers verweist.

    • Ein A-Datensatz mitwww.example.com, der auf die öffentliche IP-Adresse Ihres Servers verweist.

  • Nginx wird installiert, indemHow To Install Nginx on Ubuntu 18.04 befolgt wird. Stellen Sie sicher, dass Sie einserver blockfür Ihre Domain haben. In diesem Tutorial wird/etc/nginx/sites-available/example.com als Beispiel verwendet.

[[Schritt-1 - Installieren von Certbot]] == Schritt 1 - Installieren von Certbot

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

Certbot befindet sich in einer sehr aktiven Entwicklung, daher sind die von Ubuntu bereitgestellten Certbot-Pakete in der Regel veraltet. Die Certbot-Entwickler unterhalten jedoch ein Ubuntu-Software-Repository mit aktuellen Versionen, sodass wir stattdessen dieses Repository verwenden.

Fügen Sie zunächst das Repository hinzu:

sudo add-apt-repository ppa:certbot/certbot

Sie müssenENTER drücken, um zu akzeptieren.

Installieren Sie das Nginx-Paket von Certbot mitapt:

sudo apt install python-certbot-nginx

Certbot ist jetzt einsatzbereit, aber damit SSL für Nginx konfiguriert werden kann, müssen wir einige Einstellungen von Nginx überprüfen.

[[Schritt-2 - Bestätigung der Nginx-39-s-Konfiguration]] == Schritt 2 - Bestätigung der Nginx-Konfiguration

Certbot muss in der Lage sein, den richtigenserver-Block in Ihrer Nginx-Konfiguration zu finden, damit SSL automatisch konfiguriert werden kann. Dies geschieht insbesondere, indem nach einerserver_name-Richtlinie gesucht wird, die der Domäne entspricht, für die Sie ein Zertifikat anfordern.

Wenn Sie dieserver block set up step in the Nginx installation tutorial befolgt haben, sollten Sie einen Serverblock für Ihre Domain bei/etc/nginx/sites-available/example.com haben, wobei dieserver_name-Direktive bereits entsprechend festgelegt ist.

Öffnen Sie zur Überprüfung die Serverblockdatei für Ihre Domain mitnano oder Ihrem bevorzugten Texteditor:

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

Suchen Sie die vorhandeneserver_name-Zeile. Es sollte so aussehen:

/etc/nginx/sites-available/example.com

...
server_name example.com www.example.com;
...

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

Wenn dies nicht der Fall ist, aktualisieren Sie es entsprechend. Speichern Sie dann die Datei, beenden Sie Ihren Editor und überprüfen Sie die Syntax Ihrer Konfigurationsänderungen:

sudo nginx -t

Wenn Sie eine Fehlermeldung erhalten, öffnen Sie die Serverblockdatei erneut und suchen Sie nach Tippfehlern oder fehlenden Zeichen. Wenn die Syntax Ihrer Konfigurationsdatei korrekt ist, laden Sie Nginx neu, um die neue Konfiguration zu laden:

sudo systemctl reload nginx

Certbot kann nun den richtigenserver-Block finden und aktualisieren.

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

[[Schritt-3 -—- Zulassen von https-durch-die-Firewall]] == Schritt 3 - Zulassen von HTTPS durch die Firewall

Wenn Sie die Firewall vonufwaktiviert haben, wie in den erforderlichen Anleitungen empfohlen, müssen Sie die Einstellungen anpassen, um HTTPS-Verkehr zuzulassen. Glücklicherweise registriert Nginx bei der Installation einige Profile mitufw.

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

sudo ufw status

Es wird wahrscheinlich so aussehen, was bedeutet, dass nur HTTP-Verkehr zum Webserver erlaubt ist:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Wenn Sie zusätzlich HTTPS-Datenverkehr zulassen möchten, lassen Sie das vollständige Nginx-Profil zu und löschen Sie die überflüssige Nginx-HTTP-Profilzulassung:

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

Ihr Status sollte jetzt so aussehen:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Lassen Sie uns als Nächstes Certbot ausführen und unsere Zertifikate abrufen.

[[Schritt-4 -—- Erhalten eines SSL-Zertifikats]] == Schritt 4 - Erhalten eines SSL-Zertifikats

Certbot bietet verschiedene Möglichkeiten, SSL-Zertifikate über Plugins abzurufen. Das Nginx-Plugin kümmert sich darum, Nginx neu zu konfigurieren und die Konfiguration bei Bedarf neu zu laden. Geben Sie Folgendes ein, um dieses Plugin zu verwenden:

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

Dadurch wirdcertbot mit dem Plugin--nginx ausgeführt, wobei-d verwendet wird, um die Namen anzugeben, für die das Zertifikat gültig sein soll.

Wenn Siecertbot zum ersten Mal ausführen, werden Sie aufgefordert, eine E-Mail-Adresse einzugeben und den Nutzungsbedingungen zuzustimmen. Danach kommuniziertcertbot mit dem Let's Encrypt-Server und führt dann eine Herausforderung aus, um zu überprüfen, ob Sie die Domäne steuern, für die Sie ein Zertifikat anfordern.

Wenn dies erfolgreich ist, werden Sie voncertbotgefragt, wie Sie Ihre HTTPS-Einstellungen konfigurieren möchten.

OutputPlease 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 Wahl und drücken SieENTER. Die Konfiguration wird aktualisiert und Nginx wird neu geladen, um die neuen Einstellungen zu übernehmen. certbot wird mit einer Nachricht abgeschlossen, die Ihnen mitteilt, dass der Prozess erfolgreich war und wo Ihre Zertifikate gespeichert sind:

OutputIMPORTANT 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 2018-07-23. 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

Ihre Zertifikate werden heruntergeladen, installiert und geladen. Laden Sie Ihre Website mithttps:// neu und beachten Sie die Sicherheitsanzeige Ihres Browsers. Es sollte anzeigen, dass die Site ordnungsgemäß gesichert ist, normalerweise mit einem grünen Schlosssymbol. Wenn Sie Ihren Server mitSSL Labs Server Testtesten, erhält er die NoteA.

Zum Abschluss testen wir den Erneuerungsprozess.

[[Schritt 5 - Überprüfung der automatischen Erneuerung von Certbot]] == Schritt 5 - Überprüfung der automatischen Erneuerung von Certbot

Let´s Encrypt-Zertifikate sind nur neunzig Tage gültig. Dies soll Benutzer dazu ermutigen, ihren Zertifikaterneuerungsprozess zu automatisieren. Das von uns installierte Paketcertbot erledigt dies für uns, indem es/etc/cron.d ein Erneuerungsskript hinzufügt. Dieses Skript wird zweimal täglich ausgeführt und erneuert automatisch alle Zertifikate, die innerhalb von 30 Tagen nach dem Ablaufdatum vorliegen.

Um den Erneuerungsprozess zu testen, können Sie einen Trockenlauf mitcertbot 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 die automatische Erneuerung jemals fehlschlägt, sendet Let’s Encrypt eine Nachricht an die von Ihnen angegebene E-Mail-Adresse und warnt Sie, wenn Ihr Zertifikat in Kürze abläuft.

Fazit

In diesem Lernprogramm haben Sie den Let's Encrypt-Clientcertbot installiert, SSL-Zertifikate für Ihre Domain heruntergeladen, Nginx für die Verwendung dieser Zertifikate konfiguriert und die automatische Zertifikatserneuerung eingerichtet. Wenn Sie weitere Fragen zur Verwendung von Certbot haben, isttheir documentation ein guter Ausgangspunkt.