
Let’s Encrypt ist eine noch junge Zertifizierungsstelle, über die sich kostenlose TLS-/SSL-Zertifikate unkompliziert beziehen und installieren lassen, damit HTTPS-Anfragen an deine Webserver verschlüsselt laufen. Vereinfacht wird das Ganze durch eine Software namens Certbot, die den größten Teil der nötigen Schritte automatisiert. Und denk daran: Google will mit seinem Browser Chrome alle Nutzer vor unsicheren Seiten warnen, was sich auf dein Ranking auswirken kann.
In diesem Tutorial zeige ich dir, wie du mit Let’s Encrypt ein kostenloses SSL-Zertifikat für Nginx unter Ubuntu 14.04 bekommst. Außerdem zeige ich dir, wie du die Erneuerung automatisierst (ein Let’s-Encrypt-Zertifikat ist nur 90 Tage gültig).
Schritt 1, Certbot installieren
Was ist Certbot? Certbot schaltet HTTPS auf deiner Website automatisch frei, indem es Let’s-Encrypt-Zertifikate ausrollt. Wenn du weder Nginx noch Ubuntu 14.04 einsetzt, wirf einen Blick auf die Projektseite: dort ist für jedes System beschrieben, wie sich SSL-Zertifikate mit Let’s Encrypt erzeugen lassen.
Zuerst laden wir Certbot in das Verzeichnis /usr/local/sbin herunter:
cd /usr/local/sbin
wget https://dl.eff.org/certbot-autoVergiss nicht, die Datei ausführbar zu machen:
chmod a+x /usr/local/sbin/certbot-autoSchritt 2, Ein Zertifikat beziehen
Damit Certbot auf das Verzeichnis zugreifen kann, passen wir kurz die Nginx-Konfiguration an. Standardmäßig liegt sie unter /etc/nginx/sites-available/default. Wir bearbeiten sie hier mit nano, du kannst aber jeden Editor nehmen, der dir liegt:
nano /etc/nginx/sites-available/defaultErgänze innerhalb des Server-Blocks:
server {
#votre configuration ...
location ~ /.well-known {
allow all;
}
}Du brauchst das öffentliche Verzeichnis deiner Website. Mit der Standardkonfiguration ist das /usr/share/nginx/html, unter Laravel /path/to/public/.
Prüfe anschließend, ob es Fehler gibt.
nginx -tWenn alles passt, startest du Nginx neu:
service nginx restartSchritt 3, TLS/SSL auf dem Nginx-Server konfigurieren
Jetzt, wo wir den öffentlichen Pfad kennen, können wir das Webroot-Plugin nutzen, um ein SSL-Zertifikat anzufordern. Die Domainnamen geben wir dabei über die Option -d an. Soll ein Zertifikat für mehrere Domainnamen gelten (etwa beispiel.de und www.beispiel.de), dann führe alle auf und beginne mit der obersten Domain (also beispiel.de). Achte außerdem darauf, die hervorgehobenen Stellen durch deinen Webroot-Pfad und deine Domainnamen zu ersetzen:
certbot-auto certonly -a webroot --webroot-path=/votre/chemin/public -d exemple.com -d www.exemple.comCertbot fragt dich einiges ab, unter anderem deine E-Mail-Adresse: darüber wirst du benachrichtigt, wenn das Zertifikat demnächst abläuft. Wie sich die Erneuerung automatisieren lässt, sehen wir uns gleich an.
Die Zertifikate
Nachdem das Zertifikat ausgestellt ist, hast du folgende Dateien:
- cert.pem: das Zertifikat deiner Domain
- chain.pem: das Zertifikat von Let’s Encrypt
- fullchain.pem: cert.pem und chain.pem zusammengefügt
- privkey.pem: dein privater Schlüssel.
Diese Dateien liegen in einem Unterverzeichnis von /etc/letsencrypt/archive. Der Let’s-Encrypt-Client legt allerdings symbolische Links auf die jeweils aktuellen Zertifikate an, und zwar unter /etc/letsencrypt/live/votre_nom_de_domaine. Da diese Links immer auf die neuesten Zertifikate zeigen, ist das der Pfad, über den du dein aktuelles Zertifikat einbindest.
Einen Diffie-Hellman-Schlüssel erzeugen
Für zusätzliche Sicherheit solltest du außerdem einen Diffie-Hellman-Schlüssel mit 2048 Bit erzeugen:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Das dauert ein paar Minuten, danach liegt deine DH-Datei unter /etc/ssl/certs/dhparam.pem.
Jetzt, wo das SSL-Zertifikat da ist, musst du Nginx so konfigurieren, dass er es auch benutzt.
Dafür öffnen wir unseren Server-Block noch einmal:
nano /etc/nginx/sites-available/defaultWir löschen die folgenden Zeilen, die Port 80 für HTTP-Anfragen abhören, oder kommentieren sie aus:
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;Anschließend lassen wir Port 443 für HTTPS abhören:
listen 443 ssl;Im Server-Block ergänzen wir zusätzlich den symbolischen Link, der auf die Zertifikate zeigt, die wir mit dem Befehl certbot-auto erzeugt haben:
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;Dazu kommt die SSL-Standardkonfiguration unseres Servers:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
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: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';
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;Und schließlich ergänzt du außerhalb deines Haupt-Server-Blocks diesen neuen Server-Block, der HTTP (Port 80) auf HTTPS (Port 443) umleitet.
server {
listen 80;
listen [::]:80;
server_name exemple.com www.exemple.com;
return 301 https://$host$request_uri;
}Prüfe, ob deine Konfiguration Fehler enthält:
nginx -tDanach startest du Nginx neu:
service nginx restartSchritt 4, Das Zertifikat automatisch erneuern
Wie eingangs gesagt laufen die SSL-Zertifikate nach 90 Tagen ab und müssen erneuert werden. Falls du es vergisst, kommt rechtzeitig vor Ablauf eine E-Mail von Let’s Encrypt.
Damit die Erneuerung automatisch läuft, tragen wir den Befehl certbot-auto renew in die Cronjobs unseres Servers ein.
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reloadJeden Montag um 2:30 Uhr wird das Zertifikat erneuert, um 2:35 Uhr startet Nginx neu.
Fazit
Dein Webserver läuft jetzt mit einem anerkannten Zertifikat von Let’s Encrypt. Das ist eine gute Alternative zu kostenpflichtigen Zertifikaten. Viele Hoster wie OVH bieten SSL dank Let’s Encrypt ohnehin kostenlos an. Interessant ist das auch deshalb, weil Google die Websites Stück für Stück Richtung HTTPS drängt.
Quelle: digitalocean.com & wikipedia.org
···


