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:
Die einzige Anleitung, die man zum Thema NGINX-Server mit HHVM und PHP5-FPM lesen muss
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 admin@exmaple.com --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:
Ö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!
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 ^(.*) https://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
How To Secure Nginx with Let’s Encrypt on Ubuntu 14.04 …
certificate and use it with Nginx on Ubuntu 14.04. We will also …