Seit Anfang Dezember befindet sich Let’s Encrypt in der öffentlichen Beta und stellt konstenlose SSL-Zertifikate aus, die von den Browsern als vertrauenswürdig eingestuft werden. In dieser kurzen Anleitung zeige ich die nötigen Schritte dazu auf.

Wenn ihr euren (VPS-)Server so eingerichtet habt, wie ich es in einem vorherigen Beitrag dargestellt habe, ist der Aufwand minimal– wenn nicht schaut euch die Anleitung einmal an:

SSL-Zertifikat mit Let’s Encrypt

Achtet darauf, dass die Seite aktiv ist. Der Let’s Encrypt Client wird auf dem gleichen Server installiert, wie die zu verifizierende Domain
Die bestehende Datei muss editiert. Wir sind per SSH-Shell auf dem Server eingeloggt und geben den folgenden Befehl ein:

vim /etc/nginx/common/locations.conf

Den Eintrag # Deny hidden files lines erweitern wir um den fettgedruckten Eintrag.

# Deny hidden files
location ~ /\.well-known {
  allow all;
}

Anschließend prüfen und starten/laden wir Nginx neu .

nginx -t && service nginx reload

Jetzt laden wir den Let’s Encrypt Client aus dem Github-Repository und manövrieren in den Ordner.

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Wir beantragen ein SSL-Zertifikat von Let’s Encrypt.  Der Eintrag „example.com“ bzw. der Ordner zum Webserver muss entsprechend angepasst werden und dient hier nur als illustrierendes Beispiel:

./letsencrypt-auto certonly --webroot -w /var/www/example.com/htdocs/ -d example.com -d www.example.com --email [email protected] --text --agree-tos

Je nach Tageszeit dauert es jetzt ein paar Minuten und ihr bekommt im Anschluss die folgende Meldung wenn die Zertifizierung funktioniert hat:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2016-03-03. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Jetzt müssen wir das SSL-Zertifikat in Nginx aktivieren und begeben uns zur nachfolgenden Konfigurationsdatei.

vi /var/www/example.com/conf/nginx/ssl.conf 

Die Datei sollte nun wie folgt aussehen. Solltet ihr noch eine alte NGINX-Version ohne HTTP/2-Unterstützung installiert haben ersetzt ihr http2 durch spdy. Persönlich würde ich aber raten, so schnell wie möglich auf eine aktuelle Version von Nginx zu aktualisieren, da es sich bei SPDY um ein veraltetes Protokoll handelt.

    listen 443 ssl http2;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;

Zum Schluss überprüfen wir abermals die Konfiguration und laden Nginx neu:

nginx -t && service nginx reload

Falls ihr alle Verbindungen von HTTP zu HTTPS weiterleiten wollt muss noch folgende Konfigurationsdatei erstellt/editiert werden:

vim /etc/nginx/conf.d/force-ssl.conf 

Zum letzten Mal prüfen wir die Konfiguration und laden Nginx neu:

nginx -t && service nginx reload

Wenn man das Zertifikat auf Schwachstellen hin untersucht wird man feststellen, dass es noch Raum für Verbesserungen gibt. Es gibt aber ein einfaches Prozedere um die Sicherheit des SSL-Zertifikats zu erhöhen. Hier die Vorgehensweise:

Nicht verpassen:
Die einzige Anleitung, die man zum Thema NGINX-Server mit HHVM und PHP5-FPM lesen muss

Öffnet die Nginx-Konfigurationsdatei:

vim /etc/nginx/nginx.conf

und fügt diesenEintrag unterhalb von  ssl_ciphers ein:

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

Gebt den nachfolgenden Befehl per SSH-Terminal ein. Der Vorgang dauert eine Weile, also nicht verzagen!

openssl dhparam -out /etc/nginx/dhparams.pem 2048

Öffnet (abermals) die Nginx-Konfigurationsdatei:

vim /etc/nginx/nginx.conf

und fügt den Eintrag ein:

ssl_dhparam /etc/nginx/dhparams.pem;

 Startet euren Server anschließend neu.  Falls ihr eurer Zertifikat auf Schwachstellen untersuchen möchtet, empfehle ich euch diesen Test durchzuführen: SSL Server Test

Nach dem Update wird diese Seite hier (bzw. das von Let’s Encrypt ausgestellte Zertifikat) mit A- bewertet – noch nicht perfekt, aber nah dran!

Let's Encrypt SSL-Testergebnis

Habt ihr, warum auch immer mehrere Domains, über die eure Webseite erreichbar ist, im Einsatz, ist es sicher ratsam, wenn alle Verbindungen über HTTPS laufen und zum Schluss auf EINE einzige Domain hin umgeleitet werden. Das geht wie folgt:

Öffnet die Nginx-Konfigurationsdatei:

vim /etc/nginx/sites-available/example.com

und fügt diesen Eintrag oberhalb eures Server-Blocks ein :

server {
 
 server_name domain2.com domain3.com www.domain2.com www.domain3.com;
 rewrite ^(.*) http://www.example.com$1 permanent;
}
server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name _;
 return 301 https://$host$request_uri;
}

Fazit und weiterführende Infos

Für ambitionierte Anfänger und Fortgeschrittene bietet diese Anleitung eine einfache Möglichkeit, den eigenen Webserver mit einer sicheren und kostenlosen SSL-Verschlüsselung zu betreiben. Wagt man zudem den Schritt seine Seite auf HTTP/2 umzustellen, ist man für die nächste Zeit sprichwörtlich auf der sicheren Seite.

Let’s Encrypt-Webseite

Let’s Encrypt – Wikipedia

Auf Client-Seite (dem Webserver eines Antragstellers) wird eine Apache- lizenzierte Python-Zertifikatsverwaltungssoftware namens letsencrypt installiert.

How To Secure Nginx with Let’s Encrypt on Ubuntu 14.04 …

Dec 17, 2015 In this tutorial, we will show you how to use Let’s Encrypt to obtain a free SSL
certificate and use it with Nginx on Ubuntu 14.04. We will also …

Keine weiteren Beiträge