Webserver Sicherheit · 9 min read · Nov 17, 2025
Installieren Sie Let's Encrypt und sichern Sie Nginx mit SSL/TLS in Debian 9
Dieses Tutorial zeigt Ihnen, wie Sie einen Nginx-Webserver auf Debian 9 mit einem TLS-Zertifikat installieren und sichern, das kostenlos von der Let’s Encrypt-Zertifizierungsstelle ausgestellt wird. Darüber hinaus konfigurieren wir die automatische Erneuerung der Let’s Encrypt-TLS-Zertifikate mithilfe eines Cron-Jobs, bevor die Zertifikate ablaufen.
TLS, auch bekannt als Transport Layer Security, ist ein Netzwerkprotokoll, das SSL-Zertifikate verwendet, um den Netzwerkverkehr zu verschlüsseln, der zwischen einem Server und einem Client oder zwischen einem Webserver, wie dem Nginx-Server, und einem Browser fließt. Alle Daten, die zwischen diesen beiden Entitäten ausgetauscht werden, sind gesichert, und die Verbindung kann nicht entschlüsselt werden, selbst wenn sie mit Techniken wie einem Man-in-the-Middle-Angriff oder Packet Sniffing abgefangen wird. Die certbot-Paketsoftware ist das offizielle Client-Utility, das von der Let’s Encrypt CA bereitgestellt wird und im Prozess der Generierung und des Herunterladens kostenloser Let’s Encrypt-Zertifikate in Debian verwendet werden kann.
Anforderungen
- Installieren Sie den LEMP-Stack in Debian 9.
- Einen öffentlich registrierten Domainnamen mit ordnungsgemäßen DNS-Einträgen (A-Einträge oder CNAME-Einträge für Subdomains).
- Direkter Zugriff auf die Konsole des Servers oder Remote-SSH-Zugriff auf den Server.
- Ein Benutzerkonto mit Root-Rechten oder direkter Zugriff auf das Root-Konto.
Installieren Sie das Certbot-Client-Utility
Um das Let’s Encrypt certbot-Client-Utility in Debian 9 aus den offiziellen Debian-Repositories zu installieren, öffnen Sie ein Terminal und geben Sie den folgenden Befehl mit Root-Rechten ein, wie im folgenden Screenshot dargestellt.
apt-get install certbot
Das Debian apt-Utility, das die Befehlszeilenschnittstelle des Haupt-Paketmanagers von Debian ist, wird Sie nach einigen Vorprüfungen fragen, ob Sie mit der Installation des certbot-Pakets und aller erforderlichen Abhängigkeiten fortfahren möchten. Um den Installationsprozess zu akzeptieren, antworten Sie mit ja (y) an der Eingabeaufforderung der Serverkonsole.
Holen Sie sich das Let’s Encrypt-Zertifikat
Um Let’s Encrypt-Zertifikate für eine Domain zu generieren und herunterzuladen, stellen Sie zunächst sicher, dass der Nginx-Webserver läuft und mindestens Port 80 aus dem Internet zugänglich ist. Um zu überprüfen, ob Nginx läuft, führen Sie die folgenden Befehle mit Root-Rechten aus.
sudo systemctl status nginxWenn der Server noch nicht läuft, starten Sie den Nginx-Daemon mit dem folgenden Befehl.
sudo systemctl start nginxFalls Sie eine gängige Firewall in Debian installiert haben, wie z.B. die UFW-Firewall, die alle eingehenden Verbindungen auf den Ports 80 und 443 blockiert, geben Sie die folgenden Befehle ein, um den HTTP- und HTTPS-Port im System zu öffnen.
sudo ufw allow 80/tcpsudo ufw allow 443/tcpUm Zertifikate für Ihre Domain zu erhalten, führen Sie den certbot-Befehl in der Konsole mit den folgenden Parametern und Flags aus, wie unten erklärt. Führen Sie den Befehl mit Root-Rechten aus und geben Sie Ihren Domainnamen und alle anderen Subdomains an, für die Sie Zertifikate erhalten möchten, indem Sie das –d-Flag verwenden. Geben Sie auch die –standalone-Option an, damit certbot nicht mit den Nginx-Konfigurationsdateien in Konflikt gerät. Der Nginx-Server muss gestoppt werden, während Zertifikate mit dieser Option ausgestellt werden.
Die Syntax des certbot-Befehls:
sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.comWenn Sie den certbot-Befehl zum ersten Mal ausführen und das Zertifikat erhalten, werden Sie aufgefordert, Ihre E-Mail-Adresse hinzuzufügen und den Nutzungsbedingungen von Let’s Encrypt zuzustimmen. Schreiben Sie ‘a‘, um den Nutzungsbedingungen zuzustimmen, und ‘nein‘, um Ihre E-Mail-Adresse nicht mit den Partnern von Let’s Encrypt zu teilen. Schließlich, nachdem Sie das Zertifikat für Ihre Domain erhalten haben, lesen Sie die Fußnoten, um den Systempfad der Zertifikate und das Datum, an dem sie ablaufen, zu finden.
Alternative Möglichkeit, ein Let’s Encrypt-SSL-Zertifikat zu erhalten
Um ein Let’s Encrypt-Zertifikat über das “webroot“-Plugin zu erhalten, verwenden Sie die folgende Syntax. Fügen Sie das Nginx-Webstammverzeichnis hinzu, das standardmäßig im Systempfad /var/www/html/ liegt, während Sie den certbot-Befehl mit den –webroot- und –w-Flags ausführen. Stellen Sie außerdem sicher, dass Nginx volle Schreibberechtigungen für das Webstammverzeichnis hat, um das /.well-known-Verzeichnis zu erstellen.
Die –webroot-Option für certbot wird Sie auch auffordern, Ihre E-Mail-Adresse für die Zertifikatserneuerung und Sicherheitsbenachrichtigungen hinzuzufügen. Der Certbot-Client hat einen eingebauten Code, der eine gefälschte E-Mail-Adresse erkennen kann. Sie müssen eine öffentlich zugängliche E-Mail-Adresse angeben, um mit der Zertifikatsbeschaffung fortzufahren.
certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com*Debug-Protokoll wird gespeichert in /var/log/letsencrypt/letsencrypt.log**Geben Sie die E-Mail-Adresse ein (verwendet für dringende Erneuerungen und Sicherheitsbenachrichtigungen) (Geben Sie 'c' ein, um**abzubrechen):[email protected] #Eine gefälschte E-Mail-Adresse wird erkannt**Es scheint Probleme mit dieser Adresse zu geben**. Geben Sie die E-Mail-Adresse ein (verwendet für**dringende Erneuerungen und Sicherheitsbenachrichtigungen) Wenn Sie dies wirklich überspringen möchten, können Sie**den Client mit --register-unsafely-without-email ausführen, aber stellen Sie sicher, dass Sie dann**Ihr Kontoschlüssel aus /etc/letsencrypt/accounts sichern (Geben Sie 'c' ein, um abzubrechen):[email protected]** **-------------------------------------------------------------------------------**Bitte lesen Sie die Nutzungsbedingungen unter**https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Sie müssen zustimmen**um sich beim ACME-Server unter**https://acme-v01.api.letsencrypt.org/directory zu registrieren**-------------------------------------------------------------------------------**(A) zustimmen/(C) abbrechen: a** **-------------------------------------------------------------------------------**Wären Sie bereit, Ihre E-Mail-Adresse mit der Electronic Frontier**Foundation, einem Gründungspartner des Let's Encrypt-Projekts und der gemeinnützigen**Organisation, die Certbot entwickelt, zu teilen? Wir möchten Ihnen E-Mails über EFF und**unsere Arbeit zum Verschlüsseln des Webs, zum Schutz seiner Benutzer und zur Verteidigung digitaler Rechte senden.**-------------------------------------------------------------------------------**(Y)es/(N)o: n**Erhalte ein neues Zertifikat**Führe die folgenden Herausforderungen durch:**http-01-Herausforderung für www.domain.com**Verwende den Webstamm-Pfad /var/www/html/ für alle nicht übereinstimmenden Domains.**Warte auf die Überprüfung...**Bereinige Herausforderungen** **WICHTIGE HINWEISE:** - Herzlichen Glückwunsch! Ihr Zertifikat und die Kette wurden gespeichert unter** /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Ihr** Zertifikat läuft am 2017-12-28 ab. Um in Zukunft eine neue oder angepasste Version** dieses Zertifikats zu erhalten, führen Sie einfach erneut certbot aus. Um** alle Ihre Zertifikate nicht-interaktiv zu erneuern, führen Sie "certbot** renew" aus.** - Ihre Kontodaten wurden in Ihrem Certbot** Konfigurationsverzeichnis unter /etc/letsencrypt gespeichert. Sie sollten** jetzt eine sichere Sicherung dieses Ordners erstellen. Dieses Konfigurationsverzeichnis** enthält auch Zertifikate und private Schlüssel, die von Certbot erhalten wurden,** daher ist es ideal, regelmäßige Sicherungen dieses Ordners zu erstellen.** - Wenn Ihnen Certbot gefällt, ziehen Sie bitte in Betracht, unsere Arbeit zu unterstützen, indem Sie:* * ** An ISRG / Let's Encrypt spenden: https://letsencrypt.org/donate** An EFF spenden: **https://eff.org/donate-le*
Konfigurieren Sie Nginx für TLS (SSL)
Eine vollständige Standard-TLS-Konfigurationsdatei für einen Nginx-Server sollte im folgenden Dateiausschnitt wie folgt aussehen.
/etc/nginx/sites-enabled/default-ssl Dateibeispiel:
* server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name www.yourdomain.com yourdomain.com;
#server_name _;
root /var/www/html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#SSL-Zertifikate
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}
set $cache_uri $request_uri;
location ~ /.well-known {
allow all;
}
#
# # Mit php-fpm (oder anderen Unix-Sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # Mit php-cgi (oder anderen TCP-Sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# Zugriff auf .htaccess-Dateien verweigern, wenn das Dokumentenstammverzeichnis von Apache
# mit dem von nginx übereinstimmt
#
#location ~ \.ht {
# deny all;
#}
** }*Die Codezeilen zur Verarbeitung von PHP-Skripten über den FastCGI-Prozessmanager sind ebenfalls in diesem Auszug zu finden und werden durch die folgenden Zeilen dargestellt.
*location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
*Installieren Sie Let’s Encrypt-Zertifikate in Nginx
Die Let’s Encrypt-Zertifikate und -Schlüssel werden im Verzeichnis /etc/letsencrypt/live/www.yourdomain.com/ in Debian gespeichert. Der ls-Befehl gegen das oben genannte Verzeichnis zeigt alle Zertifikatkomponenten an, wie die Ketten-Datei, die vollständige Ketten-Datei, den privaten Schlüssel und die Zertifikatdatei.
ls /etc/letsencrypt/live/www.yourdomain.com/Um das Let’s Encrypt-Zertifikat in die TLS-Konfigurationsdatei des Nginx-Webservers zu installieren, öffnen Sie die Nginx default-ssl-Datei und aktualisieren Sie die folgenden Zeilen, um die Pfade der Let’s Encrypt-Zertifikatdateien für Ihre Domain widerzuspiegeln, wie im folgenden Auszug gezeigt.
nano /etc/nginx/sites-enabled/default-sslÄndern Sie die folgenden Zeilen wie folgt:
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";**
Außerdem, wenn die ssl_dhparam-Anweisung in der Nginx-SSL-Konfiguration vorhanden ist, müssen Sie einen neuen 2048-Bit-Diffie-Hellman-Schlüssel generieren, indem Sie den folgenden Befehl ausführen. Die Generierung der Diffie-Hellman-Schlüsselparameter sollte eine Weile dauern, abhängig von der Zufälligkeit oder Entropie Ihres Systems.
openssl dhparam –out /etc/nginx/dhparam.pem 2048Schließlich, bevor Sie die Nginx-TLS-Konfiguration aktivieren, indem Sie den Nginx-Daemon neu starten, um die Änderungen zu reflektieren, überprüfen Sie zunächst die Nginx-Konfigurationen auf mögliche Syntaxfehler. Danach, wenn der Test der Nginx-Konfigurationsdatei erfolgreich ist, starten Sie den Nginx-Daemon neu, um die neue Konfiguration zusammen mit den Let’s Encrypt-Zertifikaten zu laden, indem Sie die folgenden Befehle ausführen.
nginx -tservice nginx restartUm zu überprüfen, ob der Nginx-Dienst einen geöffneten Socket im Listening-Zustand auf Port 443 besitzt, führen Sie den netstat-Befehl aus, wie im folgenden Auszug gezeigt.
netstat –tulpn | grep -e 443 -e LISTENSie sollten auch einen Browser öffnen und zu Ihrem Domainnamen über das HTTPS-Protokoll navigieren. Wenn die Let’s Encrypt-Zertifikate erfolgreich in Nginx angewendet wurden, sollte der SSL-Handshake reibungslos funktionieren, ohne Fehler zu werfen.
Zwingen Sie den Webverkehr zu HTTPS
Um Ihre Domainbesucher zu zwingen, Ihre Website nur über das HTTPS-Protokoll zu durchsuchen, öffnen Sie die Standardkonfigurationsdatei von Nginx sites-enabled und fügen Sie die folgende Zeile hinzu, die alle Anfragen, die Port 80 erreichen, mit einem 301-Statuscode (dauerhaft verschoben) auf Port 443 umleitet.
nano /etc/nginx/sites-enabled/defaultDie Umleitungsanweisung sollte wie im folgenden Auszug dargestellt aussehen.
*server_name www.yourdomain.com yourdomain.com;
**return 301 https://$server_name$request_uri;*
Anschließend starten Sie den Nginx-Daemon neu, um die Änderung anzuwenden, indem Sie den folgenden Befehl ausführen.
service nginx restartAbschließende Überprüfungen
Um die von der Let’s Encrypt CA generierten Zertifikate weiter zu untersuchen, können Sie einen modernen Webbrowser wie Chrome verwenden. Besuchen Sie Ihre Domain im Chrome-Browser und drücken Sie die F12-Funktionstaste, um die Entwicklertools zu öffnen. Navigieren Sie zum Tab Sicherheit und klicken Sie auf die Schaltfläche Zertifikat anzeigen, um das Zertifikat zu öffnen, wie in den folgenden Screenshots gezeigt.
Ein weiteres nützliches Dienstprogramm zur Untersuchung von SSL-Zertifikaten ist das openssl-Befehlszeilen-Dienstprogramm. Um zusätzliche Informationen für ein Let’s Encrypt CA-Zertifikat anzuzeigen, führen Sie den folgenden Befehl in einer Linux-Konsole aus.
openssl s_client –connect www.yourdomain.com:443
Automatische Erneuerung des Let’s Encrypt-Zertifikats
Um ein von der Let’s Encrypt CA ausgestelltes Zertifikat vor dem Ablaufdatum automatisch zu erneuern, planen Sie einen Cronjob, der einmal täglich um 2:00 Uhr ausgeführt wird, indem Sie den folgenden Befehl eingeben. Die Ausgabe des ausgeführten Cronjobs wird in eine Protokolldatei geleitet, die in /var/log/letsencrypt.log gespeichert ist.
crontab –eCronjob zur Erneuerung des Zertifikats.
**0 2 * * *** certbot renew >> /var/log/letsencrypt.logDas ist alles! Für andere, fortgeschrittenere Konfigurationen bezüglich Let’s Encrypt-Zertifikaten und -Utilities besuchen Sie die offizielle Dokumentation unter der folgenden Internetadresse https://certbot.eff.org/docs/.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.