SSL-Zertifikat mit Let's Encrypt erstellen

SSL-Zertifikat in Nginx konfigurieren

SSL-Zertifikate müssen für die Verwendung von sicheren HTTPS-Verbindungen erstellt und im Webserver konfiguriert werden. Nur damit ist der Verkehr zwischen Server und Client abhörsicher. Die Einrichtung in Nginx ist dabei relativ simpel und schnell umgesetzt. Wie und wo ein kostenloses und akzeptiertes SSL-Zertifikat erstellt werden kann, erfährst du in SSL-Zertifikat mit Let’s Encrypt erstellen. Wie Nginx installiert und konfiguriert wird, habe ich in diesem Artikel beschrieben.

Konfiguration von SSL-Zertifikaten in Nginx

Für die Konfiguration von SSL-Zertifikaten in Nginx sind die markierten Zeilen wichtig.

server {
        listen 80; # hört auf Port 80 / HTTP Verkehr
        listen 443 ssl; # hört auf Port 443 und verwendet SSL/TLS für HTTPS

        root /usr/share/nginx/html; # Web-Stammverzeichnis mit HTML und PHP-Dateien
        index index.html index.htm index.php;

        server_name domain.de; # Domain für die Nginx mit dieser Anweisung antwortet
        ssl_certificate /etc/nginx/ssl/fullchain.pem; # Pfad zu Chained-Zertifikat
        ssl_certificate_key /etc/nginx/ssl/privkey.pem; # Pfad zum privaten Schlüssel

        location / {
                try_files $uri $uri/ =404;
        }
}

In diesem Beispiel hört der Webserver auf Port 80 (HTTP) und 443 (HTTPS). ssl gibt bei listen 443 ssl; an, dass SSL/TLS (also HTTPS) verwendet werden soll. Bei ssl_certificate wird das signierte Zertifikat mit Zertifizierungskette hinterlegt, also der Certificate Chain inkl. Intermediate Zertifikat. Mit ssl_certificate_key wird der private Schlüssel hinterlegt um die Verbindungen zu entschlüsseln.

Als Protokoll verwendet Nginx standardmäßig TLSv1 TLSv1.1 TLSv1.2, für die Ciphersuites HIGH:!aNULL:!MD5. Über die Anweisungen ssl_protocols TLSv1.2,... und ssl_ciphers HIGH:MEDIUM:!aNULL... kann das angepasst werden.

Weitere hilfreiche Informationen zur Konfiguration liefert Nginx in einem eigenen Artikel. Das Mozilla Projekt nennt außerdem weitere, empfohlene Einstellungen um die die Sicherheit erhöhen.

Der Webserver kann anschließend über Webtools wie https://de.ssl-tools.net/webservers oder https://www.ssllabs.com/ssltest/ getestet werden.

Weiterleitung von HTTP zu HTTPS

Neben der zusätzlichen Konfiguration von HTTPS macht es Sinn, sämtlichen HTTP-Verkehr anzunehmen und an eine HTTPS-Verbindung zu übergeben (mit obereren Implementierung ersetzen!). Damit werden ausschließlich SSL/TLS-gesicherte HTTPS-Verbindungen vom Webserver bearbeitet.

server {
        listen 80;
        server_name domain.de;
        return 301 https://$server_name$request_uri; # Dauerhafte Weiterleitung mit 301 Statuscode
}

server {
        listen 443 ssl; # hört auf Port 443 und verwendet SSL/TLS für HTTPS
        root /usr/share/nginx/html; # Web-Stammverzeichnis mit HTML und PHP-Dateien
        index index.html index.htm index.php;

        server_name domain.de; # Domain für die Nginx mit dieser Anweisung antwortet
        ssl_certificate /etc/nginx/ssl/fullchain.pem; # Pfad zu Chained-Zertifikat
        ssl_certificate_key /etc/nginx/ssl/privkey.pem; # Pfad zum privaten Schlüssel

        location / {
                try_files $uri $uri/ =404;
        }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.