Website-Suche

So sichern Sie Nginx mit Let's Encrypt unter Ubuntu und Debian


Im Anschluss an das vorherige Let's Encrypt-Tutorial zu Apache SSL besprechen wir in diesem Artikel, wie man ein kostenloses SSL/TLS-Zertifikat generiert und installiert, das von Let's Encrypt CA ausgestellt wird für Nginx-Webserver auf Ubuntu oder Debian.

Lesen Sie auch
  1. Sichern Sie Apache mit Free Let’s Encrypt auf Ubuntu und Debian
  2. Installieren Sie Let’s Encrypt SSL, um Apache auf RHEL und CentOS zu sichern
Beispielumgebung testen

Anforderungen

  1. Eine registrierte Domäne mit gültigen DNS-A-Einträgen, die auf die IP-Adresse Ihres Servers verweisen.
  2. Ein installierter Nginx-Webserver mit aktiviertem SSL und Vhost, falls Sie planen, mehrere Domänen oder Subdomänen zu hosten.

Schritt 1: Nginx-Webserver installieren

1. Installieren Sie im ersten Schritt den Nginx-Webserver, falls noch nicht installiert, indem Sie den folgenden Befehl eingeben:

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 Software Let's Encrypt in der Dateisystemhierarchie /usr/local/ mithilfe von git-Client, indem Sie die folgenden Befehle ausgeben:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Obwohl das Verfahren zum Erhalten eines Zertifikats für Nginx automatisiert ist, können Sie mit dem Let’s Encrypt Standalone-Plugin dennoch manuell ein kostenloses SSL-Zertifikat für Nginx erstellen und installieren.

Diese Methode erfordert, dass Port 80 für kurze Zeit nicht auf Ihrem System verwendet wird, während der Let’s Encrypt-Client die Identität des Servers validiert, bevor er das Zertifikat generiert.

Falls Sie Nginx bereits ausführen, stoppen Sie den Dienst, indem Sie den folgenden Befehl ausgeben.


sudo service nginx stop
OR
sudo systemctl stop nginx

Falls Sie einen anderen Dienst ausführen, der an Port 80 bindet, stoppen Sie diesen Dienst ebenfalls.

4. Bestätigen Sie, 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 im Systempfad /usr/local/letsencrypt und führen Sie den Befehl letsencrypt-auto aus, indem Sie den sicheren --standalone-Option und -d-Flag für jede Domain oder Subdomain, 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 schließlich alles erfolgreich verlaufen ist, sollte auf Ihrer Terminalkonsole eine Meldung ähnlich dem Screenshot unten erscheinen.

Schritt 3: Installieren Sie das SSL-Zertifikat von Let’s Encrypt in Nginx

9. Nachdem Ihr SSL-Zertifikat nun 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 für Ihre Domäne ausgestellten Zertifikatsdateien aufzulisten.

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 nach der ersten kommentierten Zeile, die den Anfang angibt, den folgenden Block hinzu SSL-Block. Verwenden Sie den folgenden Screenshot als Orientierung.

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 Domänennamenwerte für SSL-Zertifikate entsprechend.

11. Generieren Sie im nächsten Schritt eine starke Diffie-Hellman-Verschlüsselung im Verzeichnis /etc/nginx/ssl/, um Ihren Server davor zu schützen Sie können den Logjam-Angriff verhindern, 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 zu übernehmen.

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: Let’s Encrypt Nginx-Zertifikate automatisch erneuern

13. Von Let’s Encrypt CA ausgestellte Zertifikate sind 90 Tage lang gültig. Um die Dateien vor dem Ablaufdatum automatisch zu erneuern, erstellen Sie das Bash-Skript ssl-renew.sh im Verzeichnis /usr/local/bin/ mit dem folgenden Inhalt.

sudo nano /usr/local/bin/ssl-renew.sh

Fügen Sie den folgenden Inhalt zur Datei ssl-renew.sh 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-Dokumentstammverzeichnis ü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 Cron-Job hinzu, um das Skript alle zwei Monate um Mitternacht auszuführen, um sicherzustellen, dass Ihr Zertifikat etwa 30 Tage vor Ablauf aktualisiert wird.

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 ist es! Ihr Nginx-Server stellt jetzt SSL-Inhalte mithilfe eines kostenlosen Let's Encrypt SSL-Zertifikats bereit.