So sichern Sie Nginx mit Let’s Encrypt unter CentOS 7

Einführung

Let's Encrypt ist eine neue Zertifizierungsstelle (Certificate Authority, CA), mit der auf einfache Weise kostenlose TLS / SSL-Zertifikate abgerufen und installiert werden können, wodurch verschlüsseltes HTTPS auf Webservern ermöglicht 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 Vorgang zum Abrufen und Installieren eines Zertifikats sowohl auf Apache- als auch auf Nginx-Webservern vollständig automatisiert.

In diesem Tutorial zeigen wir Ihnen, wie Sie mit dem Let's Encrypt-Client voncertbotein kostenloses SSL-Zertifikat erhalten und es mit Nginx unter CentOS 7 verwenden. Wir zeigen Ihnen auch, wie Sie Ihr SSL-Zertifikat automatisch erneuern können.

Voraussetzungen

Bevor Sie diesem Tutorial folgen, benötigen Sie einige Dinge.

  • Ein CentOS 7-Server mit einem Nicht-Root-Benutzer, der über die Berechtigungen vonsudoverfügt. Sie können lernen, wie Sie ein solches Benutzerkonto einrichten, indem Sie die Schritte 1 bis 3 in unsereninitial server setup for CentOS 7 tutorial ausführen.

  • Sie müssen den registrierten Domainnamen besitzen oder kontrollieren, mit dem Sie das Zertifikat verwenden möchten. Wenn Sie noch keinen registrierten Domainnamen haben, können Sie einen bei einem der vielen Domainnamen-Registrare registrieren (z. Namecheap, GoDaddy usw.).

  • Ein DNSA Record, das Ihre Domain auf die öffentliche IP-Adresse Ihres Servers verweist. Dies ist erforderlich, da Let’s Encrypt überprüft, ob Sie die Domäne besitzen, für die ein Zertifikat ausgestellt wird. Wenn Sie beispielsweise ein Zertifikat fürexample.com erhalten möchten, muss diese Domäne auf Ihrem Server aufgelöst werden, damit der Validierungsprozess funktioniert. Unser Setup verwendetexample.com undwww.example.com als Domainnamen, alsoboth DNS records are required.

Sobald Sie alle Voraussetzungen aus dem Weg geräumt haben, fahren Sie mit der Installation der Let's Encrypt-Clientsoftware fort.

[[Schritt-1 - Installieren des Certbot-Let-39-S-Verschlüsselungs-Clients]] == Schritt 1 - Installieren des Certbot Let's Encrypt-Clients

Der erste Schritt zur Verwendung von Let's Encrypt zum Abrufen eines SSL-Zertifikats besteht darin, diecertbot-Software auf Ihrem Server zu installieren. Derzeit ist die beste Möglichkeit, dies zu installieren, das EPEL-Repository.

Aktivieren Sie den Zugriff auf das EPEL-Repository auf Ihrem Server, indem Sie Folgendes eingeben:

sudo yum install epel-release

Sobald das Repository aktiviert wurde, können Sie das Paketcertbot-nginxerhalten, indem Sie Folgendes eingeben:

sudo yum install certbot-nginx

Der Let's (En0rypt) -Client voncertbotist jetzt installiert und einsatzbereit.

[[Schritt-2 - Einrichten von Nginx]] == Schritt 2 - Einrichten von Nginx

Wenn Sie Nginx noch nicht installiert haben, können Sie dies jetzt tun. Das EPEL-Repository sollte bereits im vorherigen Abschnitt aktiviert sein, damit Sie Nginx installieren können, indem Sie Folgendes eingeben:

sudo yum install nginx

Starten Sie dann Nginx mitsystemctl:

sudo systemctl start nginx

Certbot kann SSL für Nginx automatisch konfigurieren, muss jedoch in der Lage sein, den richtigenserver-Block in Ihrer Konfiguration zu finden. Dazu wird nach einerserver_name-Richtlinie gesucht, die der Domain entspricht, für die Sie ein Zertifikat anfordern. Wenn Sie mit einer neuen Nginx-Installation beginnen, können Sie die Standardkonfigurationsdatei aktualisieren:

sudo vi /etc/nginx/nginx.conf

Suchen Sie die vorhandeneserver_name-Zeile:

/etc/nginx/sites-available/default

server_name _;

Ersetzen Sie den Unterstrich von_durch Ihren Domainnamen:

/etc/nginx/nginx.conf

server_name example.com www.example.com;

Speichern Sie die Datei und beenden Sie Ihren Editor. Überprüfen Sie die Syntax Ihrer Konfigurationsänderungen mit:

sudo nginx -t

Läuft dies fehlerfrei, laden Sie Nginx neu, um die neue Konfiguration zu laden:

sudo systemctl reload nginx

Certbot kann nun den richtigenserver-Block finden und aktualisieren. Jetzt aktualisieren wir unsere Firewall, um HTTPS-Verkehr zuzulassen.

[[Schritt-3 - Aktualisieren der Firewall]] == Schritt 3 - Aktualisieren der Firewall

Wenn Sie eine Firewall aktiviert haben, stellen Sie sicher, dass die Ports 80 und 443 für eingehenden Datenverkehr geöffnet sind. Wenn Sie keine Firewall verwenden, können Sie fortfahren.

Wenn einefirewalld-Firewall ausgeführt wird, können Sie diese Ports öffnen, indem Sie Folgendes eingeben:

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

Wenn eineiptables-Firewall ausgeführt wird, hängen die Befehle, die Sie ausführen müssen, stark von Ihrem aktuellen Regelsatz ab. Für einen grundlegenden Regelsatz können Sie HTTP- und HTTPS-Zugriff hinzufügen, indem Sie Folgendes eingeben:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Jetzt können wir Certbot ausführen und unsere Zertifikate abrufen.

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

Certbot bietet eine Vielzahl von Möglichkeiten, SSL-Zertifikate über verschiedene Plugins zu erhalten. Das Nginx-Plugin kümmert sich um die Neukonfiguration von Nginx und das erneute Laden der Konfiguration, wann immer dies erforderlich ist:

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 HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
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 cert will
   expire on 2017-10-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. Dies sollte bedeuten, dass die Site ordnungsgemäß gesichert ist, normalerweise mit einem grünen Schlosssymbol.

[[Schritt-5 - Aktualisieren der Diffie-Hellman-Parameter]] == Schritt 5 - Aktualisieren der Diffie-Hellman-Parameter

Wenn Sie Ihren Server jetzt mitSSL Labs Server Test testen, erhält er aufgrund schwacher Diffie-Hellman-Parameter nur eineB-Note. Dies wirkt sich auf die Sicherheit des anfänglichen Schlüsselaustauschs zwischen unserem Server und seinen Benutzern aus. Wir können dies beheben, indem wir eine neuedhparam.pem-Datei erstellen und sie unseremserver-Block hinzufügen.

Erstellen Sie die Datei mitopenssl:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Dies kann einige Minuten dauern. Öffnen Sie anschließend die Nginx-Konfigurationsdatei, die Ihrenserver-Block enthält. In unserem Beispiel ist dies die Standardkonfigurationsdatei:

sudo vi /etc/nginx/nginx.conf

Fügen Sie die folgende Zeile an einer beliebigen Stelle im Blockserverein:

/etc/nginx/nginx.conf

. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Speichern Sie die Datei, beenden Sie Ihren Editor und überprüfen Sie die Konfiguration:

sudo nginx -t

Wenn Sie keine Fehler haben, laden Sie Nginx neu:

sudo systemctl reload nginx

Ihre Site ist jetzt sicherer und sollte eine Bewertung vonAerhalten.

[[Schritt 6 - Einrichten der automatischen Erneuerung]] == Schritt 6 - Einrichten der automatischen Erneuerung

Let´s Encrypt-Zertifikate sind nur neunzig Tage gültig. Dies soll Benutzer dazu ermutigen, ihren Zertifikaterneuerungsprozess zu automatisieren. Wir müssen einen regelmäßig ausgeführten Befehl einrichten, um zu überprüfen, ob Zertifikate abgelaufen sind, und sie automatisch zu erneuern.

Um die Erneuerungsprüfung täglich durchzuführen, verwenden wircron, einen Standardsystemdienst zum Ausführen von periodischen Jobs. Wir teilencron mit, was zu tun ist, indem wir eine Datei mit dem Namencrontab öffnen und bearbeiten.

sudo crontab -e

Ihr Texteditor öffnet die Standard-Crontab, bei der es sich an dieser Stelle um eine leere Textdatei handelt. Füge die folgende Zeile ein, speichere und schließe sie:

crontab

. . .
15 3 * * * /usr/bin/certbot renew --quiet

Der15 3 * * *-Teil dieser Zeile bedeutet "Führen Sie den folgenden Befehl jeden Tag um 3:15 Uhr aus". Sie können jederzeit wählen.

Der Befehlrenew für Certbot überprüft alle auf dem System installierten Zertifikate und aktualisiert alle Zertifikate, deren Ablauf in weniger als 30 Tagen festgelegt ist. --quiet weist Certbot an, keine Informationen auszugeben oder auf Benutzereingaben zu warten.

cron führt diesen Befehl jetzt täglich aus. Alle installierten Zertifikate werden automatisch erneuert und neu geladen, wenn sie 30 Tage oder weniger vor ihrem Ablaufdatum liegen.

[.note] #Weitere Informationen zum Erstellen und Planen von Cron-Jobs finden Sie in unserer Anleitung zuHow to Use Cron to Automate Tasks in a VPS.
#

Fazit

In diesem Tutorial haben wir den Let's Encrypt-Clientcertbot installiert, SSL-Zertifikate für unsere 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.