Sicherung von Nginx mit HTTPS: Eine Schritt-für-Schritt-Anleitung

Erfahren Sie in dieser umfassenden Schritt-für-Schritt-Anleitung, wie Sie Ihren Nginx-Webserver mit HTTPS absichern. Wir behandeln die Beschaffung kostenloser SSL/TLS-Zertifikate von Let's Encrypt mithilfe von Certbot, die Konfiguration von Nginx für verschlüsselte Verbindungen und die Implementierung wesentlicher Sicherheitsmaßnahmen wie HSTS. Schützen Sie Ihre Daten, schaffen Sie Nutzervertrauen und verbessern Sie die SEO mit einer korrekt konfigurierten HTTPS-Einrichtung.

69 Aufrufe

Nginx mit HTTPS absichern: Eine Schritt-für-Schritt-Anleitung

In der heutigen digitalen Landschaft ist Sicherheit von größter Bedeutung. Die Aktivierung von HTTPS (Hypertext Transfer Protocol Secure) auf Ihrem Nginx-Webserver ist keine Option mehr; es ist eine grundlegende Voraussetzung, um sensible Daten zu schützen, das Vertrauen der Benutzer aufzubauen und das Suchmaschinen-Ranking Ihrer Website zu verbessern. HTTPS verschlüsselt die Kommunikation zwischen dem Browser eines Benutzers und Ihrem Server, verhindert das Mithören und gewährleistet die Integrität der übertragenen Informationen.

Diese Anleitung führt Sie durch die wesentlichen Schritte zur Sicherung Ihres Nginx-Servers mit einem SSL/TLS-Zertifikat, um HTTPS zu aktivieren. Wir behandeln das Einholen eines Zertifikats, die Konfiguration von Nginx zur Verwendung desselben und die Durchführung einer grundlegenden Überprüfung, um sicherzustellen, dass alles korrekt funktioniert. Am Ende dieser Anleitung werden Sie eine sicherere und vertrauenswürdigere Webpräsenz haben.

1. SSL/TLS-Zertifikate verstehen

Bevor wir uns mit der Konfiguration befassen, werfen wir einen kurzen Blick darauf, was SSL/TLS-Zertifikate sind. Ein SSL/TLS-Zertifikat ist ein digitales Zertifikat, das die Identität einer Website authentifiziert und eine verschlüsselte Verbindung ermöglicht. Wenn ein Browser über HTTPS auf eine Website zugreift, überprüft er das Zertifikat der Website, um deren Echtheit zu bestätigen und einen sicheren, verschlüsselten Kanal herzustellen.

Es gibt verschiedene Arten von Zertifikaten, aber für die meisten Websites ist ein Domain Validated (DV)-Zertifikat ausreichend. Diese Art von Zertifikat bestätigt, dass der Antragsteller die Domain kontrolliert, führt jedoch keine umfassenden Prüfungen der Organisation hinter der Domain durch.

2. Ein SSL/TLS-Zertifikat erhalten

Es gibt zwei Hauptwege, um ein SSL/TLS-Zertifikat für Ihren Nginx-Server zu erhalten:

  • Let's Encrypt (Kostenlos und Automatisiert): Let's Encrypt ist eine kostenlose, automatisierte und offene Zertifizierungsstelle. Aufgrund seiner Benutzerfreundlichkeit und Kosteneffizienz wird es den meisten Benutzern dringend empfohlen. Sie können den Prozess des Erhalts und der Erneuerung von Zertifikaten mithilfe von Tools wie Certbot automatisieren.
  • Kommerzielle Zertifizierungsstellen (Kostenpflichtig): Sie können Zertifikate auch bei kommerziellen CAs wie Comodo, DigiCert oder GoDaddy erwerben. Diese bieten oft Extended Validation (EV) oder Organization Validation (OV) Zertifikate an, die ein höheres Maß an Vertrauen bieten, aber mit Kosten und einem aufwändigeren Validierungsprozess verbunden sind.

Für diese Anleitung konzentrieren wir uns auf die Verwendung von Let's Encrypt mit Certbot, da dies die zugänglichste und am weitesten verbreitete Methode ist.

2.1 Certbot installieren

Certbot ist ein Client, der den Prozess des Erhaltens und Erneuerns von Let's Encrypt-Zertifikaten automatisiert. Der Installationsprozess variiert leicht je nach Betriebssystem und Nginx-Setup.

Für Debian/Ubuntu:

sudo apt update
sudo apt install certbot python3-certbot-nginx

Für CentOS/RHEL/Fedora:

sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

Wichtiger Hinweis: Stellen Sie sicher, dass Ihr Nginx läuft und über seinen Domainnamen über HTTP erreichbar ist, bevor Sie fortfahren. Certbot muss mit Ihrem Server kommunizieren, um den Domainbesitz zu verifizieren.

2.2 Ihr Zertifikat mit Certbot erhalten

Sobald Certbot installiert ist, können Sie es verwenden, um ein Zertifikat für Ihre Domain zu erhalten. Certbot kann Nginx automatisch für Sie konfigurieren.

Navigieren Sie zu Ihrem Nginx-Konfigurationsverzeichnis. Der genaue Pfad kann variieren, ist aber üblicherweise /etc/nginx/sites-available/.

Führen Sie den folgenden Befehl aus und ersetzen Sie your_domain.com und www.your_domain.com durch Ihre tatsächlichen Domainnamen:

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

Certbot wird dann:

  1. Nach Ihrer E-Mail-Adresse fragen: Diese wird für wichtige Erneuerungsbenachrichtigungen und Sicherheitswarnungen verwendet.
  2. Sie bitten, die Nutzungsbedingungen zu akzeptieren: Lesen und zustimmen.
  3. Fragen, ob Sie Ihre E-Mail mit der EFF teilen möchten: Optional.
  4. Ihre vorhandenen Nginx-Virtual Hosts erkennen: Es listet die gefundenen Domains auf.
  5. Fragen, wie Sie HTTPS behandeln möchten: Normalerweise haben Sie zwei Optionen:
    • 1: Kein Redirect – Sowohl HTTP als auch HTTPS bereitstellen, aber HTTP-Traffic nicht auf HTTPS umleiten.
    • 2: Redirect – Sämtlichen HTTP-Traffic automatisch auf HTTPS umleiten. Dies ist die empfohlene Option für die meisten Benutzer.

Wählen Sie Option 2 für ein sichereres Setup.

Wenn erfolgreich, wird Certbot Ihnen mitteilen, dass Ihr Zertifikat installiert wurde und die automatische Erneuerung einrichten.

3. Ihre Nginx-Konfiguration überprüfen

Nachdem Certbot ausgeführt wurde, modifiziert es automatisch Ihre Nginx-Konfigurationsdateien, um das neue SSL/TLS-Zertifikat zu verwenden, und richtet die Umleitung ein, falls Sie diese Option gewählt haben.

3.1 Überprüfen der Nginx-Konfigurationsdateien

Sie können die Nginx-Konfigurationsdatei für Ihre Website (z. B. /etc/nginx/sites-available/your_domain.com) überprüfen, um die Änderungen zu sehen. Sie sollten Direktiven wie die folgenden finden:

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com www.your_domain.com;

    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # ... weitere Konfigurationen für Ihre Seite ...
}
  • Der erste server-Block lauscht auf Port 80 (HTTP) und leitet alle Anfragen auf HTTPS um.
  • Der zweite server-Block lauscht auf Port 443 (SSL/TLS) und gibt die Pfade zu Ihrem Zertifikat (ssl_certificate) und Ihrem privaten Schlüssel (ssl_certificate_key) an.
  • include /etc/letsencrypt/options-ssl-nginx.conf; bindet empfohlene SSL-Parameter für Nginx ein.
  • ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; wird für den Diffie-Hellman-Parameteraustausch verwendet, was die Sicherheit erhöht.

3.2 Testen der Nginx-Konfiguration

Bevor Sie Nginx neu laden, ist es entscheidend, Ihre Konfiguration auf Syntaxfehler zu testen:

sudo nginx -t

Wenn der Test erfolgreich ist, sehen Sie eine Ausgabe wie:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

3.3 Nginx neu laden

Sobald der Konfigurationstest erfolgreich war, laden Sie Nginx neu, um die Änderungen zu übernehmen:

sudo systemctl reload nginx

3.4 HTTPS im Browser überprüfen

Öffnen Sie Ihren Webbrowser und navigieren Sie zu Ihrer Domain mit https://your_domain.com. Sie sollten ein Schlosssymbol in der Adressleiste sehen, das eine sichere Verbindung anzeigt. Wenn Sie auf das Schloss klicken, werden oft Details zum Zertifikat angezeigt.

4. Automatische Erneuerung

Let's Encrypt-Zertifikate sind 90 Tage lang gültig. Certbot konfiguriert automatisch einen Systemdienst (normalerweise einen Cron-Job oder einen Systemd-Timer), um Ihre Zertifikate vor ihrem Ablauf zu erneuern. Sie können den Erneuerungsprozess testen, ohne das Zertifikat tatsächlich zu erneuern, indem Sie Folgendes ausführen:

sudo certbot renew --dry-run

Dieser Befehl simuliert den Erneuerungsprozess und informiert Sie über mögliche Probleme.

5. Erweiterte SSL/TLS-Konfiguration (Optional)

Obwohl Certbot einen Großteil der grundlegenden Konfiguration übernimmt, möchten Sie möglicherweise Ihre SSL/TLS-Einstellungen für verbesserte Sicherheit oder Leistung optimieren.

5.1 SSL-Protokollversionen

Es ist ratsam, ältere, unsichere SSL/TLS-Protokollversionen wie SSLv2 und SSLv3 sowie TLSv1.0 und TLSv1.1 zu deaktivieren. Moderne Browser und Server unterstützen TLSv1.2 und TLSv1.3.

Fügen Sie die Direktive ssl_protocols in Ihrem server-Block (innerhalb der 443 ssl-Konfiguration) hinzu oder ändern Sie sie:

ssl_protocols TLSv1.2 TLSv1.3;

5.2 Cipher Suites

Cipher Suites bestimmen die für die SSL/TLS-Verbindung verwendeten Verschlüsselungsalgorithmen. Sie können bevorzugte Cipher Suites festlegen, um eine starke Verschlüsselung zu gewährleisten.

ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

Tipp: Sie können Online-Tools wie den Mozilla SSL Configuration Generator verwenden, um empfohlene SSL-Einstellungen zu generieren, die auf die Funktionen Ihres Servers zugeschnitten sind.

5.3 HSTS (HTTP Strict Transport Security)

HSTS ist eine Sicherheitsfunktion, die Browser dazu zwingt, nur über HTTPS mit Ihrer Website zu interagieren. Sobald ein Browser Ihre Seite mit aktiviertem HSTS besucht hat, verwendet er für alle zukünftigen Besuche automatisch HTTPS, selbst wenn der Benutzer http:// eingibt oder auf einen http://-Link klickt.

Um HSTS zu aktivieren, fügen Sie das Folgende zu Ihrem server-Block hinzu, der auf Port 443 lauscht:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  • max-age=31536000: Legt die Dauer fest, für die sich der Browser merken soll, nur HTTPS zu verwenden (31.536.000 Sekunden = 1 Jahr).
  • includeSubDomains: Wendet die HSTS-Richtlinie auf alle Subdomains an.

Warnung: Aktivieren Sie HSTS mit Vorsicht. Sobald es eingestellt ist, kann es schwierig sein, es rückgängig zu machen. Beginnen Sie während des Tests mit einem kurzen max-age-Wert (z. B. 1 Stunde). Stellen Sie sicher, dass Ihr HTTPS perfekt funktioniert, bevor Sie ein langes max-age festlegen.

6. Fehlerbehebung bei gängigen Problemen

  • Certbot kann Domain nicht verifizieren:
    • Stellen Sie sicher, dass die DNS-Einträge Ihrer Domain korrekt auf die IP-Adresse Ihres Servers zeigen.
    • Vergewissern Sie sich, dass Nginx läuft und über HTTP auf Port 80 erreichbar ist.
    • Überprüfen Sie die Firewall-Regeln, um sicherzustellen, dass Port 80 geöffnet ist.
  • Nginx kann nicht neu geladen werden:
    • Führen Sie sudo nginx -t aus, um Syntaxfehler in Ihren Konfigurationsdateien zu identifizieren.
    • Überprüfen Sie die Nginx-Fehlerprotokolle (/var/log/nginx/error.log).
  • Website über HTTPS nicht erreichbar:
    • Stellen Sie sicher, dass Port 443 in Ihrer Firewall geöffnet ist.
    • Überprüfen Sie, ob die Direktive listen 443 ssl; vorhanden und korrekt ist.
    • Überprüfen Sie, ob die Pfade zu ssl_certificate und ssl_certificate_key korrekt sind.

Fazit

Die Absicherung Ihres Nginx-Servers mit HTTPS ist ein entscheidender Schritt zum Aufbau einer vertrauenswürdigen und sicheren Online-Präsenz. Indem Sie dieser Anleitung folgen, haben Sie gelernt, wie Sie SSL/TLS-Zertifikate erhalten und konfigurieren, Erneuerungen automatisieren und grundlegende Sicherheitsverbesserungen implementieren. Die regelmäßige Überprüfung Ihrer SSL/TLS-Konfiguration und die Aktualisierung Ihrer Server-Software sind wesentliche Praktiken zur Aufrechterhaltung einer robusten Sicherheit.

Die Implementierung von HTTPS ist ein bedeutender Schritt bei der modernen Webserver-Verwaltung. Sie schützt nicht nur die Daten Ihrer Benutzer, sondern wirkt sich auch positiv auf den Ruf und die Sichtbarkeit Ihrer Website in Suchmaschinen aus. Erforschen Sie weiterhin erweiterte Nginx-Konfigurationen und Sicherheitspraktiken, um die Leistung und Widerstandsfähigkeit Ihres Servers weiter zu verbessern.