So sichern Sie Nginx mit Let's Encrypt auf Ubuntu und Debian
In Anlehnung an das vorherige Let's Encrypt-Tutorial zu Apache SSL besprechen wir in diesem Artikel, wie Sie ein kostenloses SSL/TLS-Zertifikat generieren und installieren, das von Let's Encrypt CA für den Nginx-Webserver auf Ubuntu oder Debian ausgestellt wurde.
Lesen Sie auch
- Sichern Sie Apache mit Free Let's Encrypt auf Ubuntu und Debian
- Installieren Sie Let's Encrypt SSL, um Apache auf RHEL und CentOS zu sichern
Testen der Beispielumgebung
Anforderungen
- Eine registrierte Domain mit gültigen
DNS-A-Einträgen, die auf die IP-Adresse Ihres Servers verweisen. - Ein installierter Nginx-Webserver mit aktiviertem SSL und Vhost, falls Sie vorhaben, mehrere Domains oder Subdomains zu hosten.
Schritt 1: Installation des Nginx-Webservers
1. Installieren Sie im ersten Schritt den Nginx-Webserver, falls noch nicht installiert, indem Sie den folgenden Befehl ausführen:
$ sudo apt-get install nginx
Schritt 2: Generieren Sie ein Let's Encrypt SSL-Zertifikat für Nginx
2. Bevor Sie ein kostenloses SSL/TLS-Zertifikat generieren, installieren Sie die Let's Encrypt-Software in der Dateisystemhierarchie /usr/local/ mit Hilfe des Git-Clients, indem Sie die folgenden Befehle ausführen:
$ sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt
3. Obwohl das Verfahren zum Abrufen eines Zertifikats für Nginx automatisiert ist, können Sie mit dem Let's Encrypt Standalone-Plugin weiterhin manuell ein kostenloses SSL-Zertifikat für Nginx erstellen und installieren.
Diese Methode setzt voraus, dass Port 80 für einen kurzen Zeitraum nicht auf Ihrem System verwendet wird, während der Let's Encrypt-Client die Identität des Servers überprüft, bevor das Zertifikat generiert wird.
Falls Sie Nginx bereits ausführen, stoppen Sie den Dienst, indem Sie den folgenden Befehl eingeben.
sudo service nginx stop
OR
sudo systemctl stop nginx
Falls Sie einen anderen Dienst ausführen, der an Port 80 gebunden ist, beenden Sie diesen Dienst ebenfalls.
4. Vergewissern Sie sich, dass Port 80 frei ist, indem Sie den Befehl netstat ausführen:
$ sudo netstat -tlpn | grep 80
5. Jetzt ist es an der Zeit, letsencrypt auszuführen, um ein SSL-Zertifikat zu erhalten. Gehen Sie zum Let's Encrypt-Installationsverzeichnis, das sich im Systempfad /usr/local/letsencrypt befindet, und führen Sie den Befehl letsencrypt-auto aus, indem Sie die Option certonly --standalone und das Flag -d für jede Domäne oder Subdomäne angeben, für die Sie ein Zertifikat generieren möchten.
$ cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld
6. Geben Sie die E-Mail-Adresse ein, die von Let's Encrypt für die Wiederherstellung verlorener Schlüssel oder dringende Benachrichtigungen verwendet wird.
7. Stimmen Sie den Lizenzbedingungen zu, indem Sie die Eingabetaste drücken.
8. Wenn alles erfolgreich gelaufen ist, sollte eine Meldung ähnlich dem Screenshot unten auf Ihrer Terminalkonsole erscheinen.
Schritt 3: Installieren Sie das Let's Encrypt SSL-Zertifikat in Nginx
9. Nachdem Ihr SSL-Zertifikat generiert wurde, ist es an der Zeit, den Nginx-Webserver für die Verwendung zu konfigurieren. Die neuen SSL-Zertifikate werden in /etc/letsencrypt/live/ in einem Verzeichnis abgelegt, das nach Ihrem Domainnamen benannt ist. Führen Sie den Befehl ls aus, um die Zertifikatsdateien aufzulisten, die für Ihre Domäne ausgestellt wurden.
$ sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk
10. Öffnen Sie als Nächstes die Datei /etc/nginx/sites-available/default mit einem Texteditor und fügen Sie den folgenden Block nach der ersten kommentierten Zeile hinzu, die den Anfang des SSL-Blocks angibt. Verwenden Sie den folgenden Screenshot als Richtlinie.
$ sudo nano /etc/nginx/sites-enabled/default
Auszug aus dem Nginx-Block:
# SSL configuration
#
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
Ersetzen Sie die Werte für den Domänennamen für SSL-Zertifikate entsprechend.
11. Generieren Sie im nächsten Schritt eine starke Diffie-Hellman-Chiffre im Verzeichnis /etc/nginx/ssl/, um Ihren Server vor dem Logjam-Angriff zu schützen, indem Sie die folgenden Befehle ausführen.
$ sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048
12. Starten Sie abschließend den Nginx-Daemon neu, um die Änderungen widerzuspiegeln.
$ sudo systemctl restart nginx
und testen Sie Ihr SSL-Zertifikat, indem Sie die untenstehende URL besuchen.
https://www.ssllabs.com/ssltest/analyze.html
Schritt 4: Automatische Erneuerung von Let's Encrypt Nginx-Zertifikaten
13. Zertifikate, die von Let's Encrypt CA ausgestellt wurden, sind 90 Tage gültig. Um die Dateien vor dem Ablaufdatum automatisch zu erneuern, erstellen Sie ssl-renew.sh Bash-Skript im Verzeichnis /usr/local/bin/ mit dem folgenden Inhalt.
$ sudo nano /usr/local/bin/ssl-renew.sh
Fügen Sie ssl-renew.sh Datei den folgenden Inhalt hinzu.
#!/bin/bash
cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0
Ersetzen Sie die Variable --webroot-path so, dass sie mit Ihrem Nginx-Dokumentstamm übereinstimmt. Stellen Sie sicher, dass das Skript ausführbar ist, indem Sie den folgenden Befehl ausgeben.
$ sudo chmod +x /usr/local/bin/ssl-renew.sh
14. Fügen Sie schließlich einen Cronjob hinzu, um das Skript alle zwei Monate um Mitternacht auszuführen, um sicherzustellen, dass Ihr Zertifikat in etwa 30 Tagen aktualisiert wird, bevor es abläuft.
$ sudo crontab -e
Fügen Sie die folgende Zeile am Ende der Datei hinzu.
0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1
Das wars! Ihr Nginx-Server stellt jetzt SSL-Inhalte mit einem kostenlosen Let's Encrypt SSL-Zertifikat bereit.












