« Kategorie: Webmaster

Gratis SSL/TLS Zertifkate (HTTPS) mit Let's Encrypt auf Ubuntu und Nginx

Gratis SSL/TLS Zertifkate (HTTPS) mit Let's Encrypt auf Ubuntu und Nginx

Let's Encrypt stellt allen Webmastern gratis SSL/TLS-Zertifikate zur Verfügung, was den Einsatz einer sicheren HTTPS-Verbindung für deine Webseite ermöglicht. Dieser Artikel zeigt Dir wie es geht!

Jeder Webmaster der seine Internetseiten noch nicht auf das sichere HTTPS-Protokoll umgestellt hat, sollte sich möglichst bald damit auseinandersetzen, denn schon allein aus Sicht der Suchmaschinenoptimierung ist dieser Schritt wichtig. Für Google ist der Einsatz des HTTPS-Protokolls ein Ranking-Faktor, d. h. die Relevanz solcher Seiten ist somit größer. Wenn deine Webseiten personenbezogene Informationen verarbeitet, ist es sowieso wichtig, im Rahmen des Datenschutzes, solche Daten per SSL/TLS sicher zu übertragen. Der Einsatz des sicheren HTTPS-Protokolls erhöht somit die Relevanz deiner Webseite in Suchmaschinen und Benutzer stufen diese eher als vertrauenswürdig ein.

Doch warum haben nicht längst alle Webseiten im WWW auf HTTPS umgestellt? Ganz einfach, die dafür benötigen SSL/TLS-Zertifikate, die deine Webseite als vertrauenswürdig einstufen, sind kostenpflichtig und teilweise auch nicht billig!
Doch damit ist jetzt schluss!

Das Let's Encrypt Projekt, welches u. a. von Facebook, Mozilla und Cisco finanziert und gefördert wird, stellt allen Webmastern unbegrenzte kostenlose SSL/TLS-Zertifikate für ihre Domains zur Verfügung.

Jeder der schon einmal einen Webserver für das HTTPS-Protokoll konfiguriert hat, weiß dass das nicht ohne ist. Mit Let's Encrypt wird dies zum Kinderspiel!

Da Nur.Gratis auch auf Basis von Let's Encrypt das HTTPS-Protokoll zur Verfügung stellt, möchte wir Dir mit diesem Artikel zeigen, wie die Einrichtung von Let's Encrypt durchgeführt wird. Also Grundlage dient uns der Webserver Nginx der auf einem Ubuntu-Server (Linux) läuft.

Schritt 1 - Vorbereitung der Installation :

Nachdem wir uns per SSH mit unserem Webserver verbunden haben, aktualisieren wir zuerst unsere Paketlisten:

sudo apt-get update
Dann installieren wir die Pakete »git« und »bc«, mit denen wir uns die aktuelle Version von Let' Encrypt von GitHub herunterladen können:
sudo apt-get -y install git bc
Nun klonen wir Let's Encrypt und speichern diese unter »/opt/letsencrypt/«:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Schritt 2 - Installation:


Mit Hilfe des Webroot Plugin von Let's Encrypt, wird innerhalb des Document-Root, also dem Wurzelverzeichnis deiner Webseite, ein spezielles Verzeichnis names ».well-known« erstellt, welches dann für die Valdierung verwendet wird.

Nun ist es wichtig, dass der Webserver den Zugriff auf dieses Verzeichnis erlaubt. Dafür gibt es unter Nginx verschiedene Möglichkeiten. Wenn deine Domain meine-domain.de heißt, sollte daher ein Zugriff auf »http://meine-domain.de/.well-known/« möglich sein.

Möglichkeit 1:

Öffne mit dem Befehl
sudo nano /etc/nginx/sites-available/default
die Default-Konfiguration deines Nginx-Webservers und füge unter dem SSL Block folgendes ein:
location ~ /.well-known {
    allow all;
}

Möglichkeit 2:


Nur.Gratis definiert die Webserver-Konfigurationen nicht in der »default«-Datei, sondern in einer eigenständigen Konfigurationsdatei unter »/etc/nginx/sites-available/«. Wir nennen sie mal »nurgratis.nginx.conf«. Darin befinden sich viele spezielle Konfigurationen, so dass der beschriebene Ablauf aus Möglichkeit 1 nicht funktioniert, da bspw. der Root spezieller Verzeichnisse variert. Deshalb haben wir innerhalb unsere »nurgratis.nginx.conf« folgendes eingefügt (nur.gratis dann durch meine-domain.de ersetzen):
location /.well-know/ {
root /var/wwwroot/nur.gratis/.well-known/;
    allow all;
}
Diese Definition sollte in den meisten Fällen dann auch funktionieren.

Nachdem wir eine der beiden Möglichkeiten umgesetzt habe, laden wir Nginx neu:
sudo service nginx reload

Schritt 3 - Zertifikate erstellen:


Nun holen wir unsere gratis Zertifikate ab und richten diese ein. Dafür wechseln wir in das Verzeichnis »/opt/letsencrypt/« und führen folgenden Befehl aus:
Nach Parameter -d gibst Du deine gewünschte Domain an und mit dem Parameter »--webroot-path=« dein Wurzelverzeichnis deiner Webseite. In unserem Fall
(für nur.gratis musst Du deine Domain eintragen)
cd /opt/letsencrypt
./letsencrypt-auto certonly -a webroot --webroot-path=/var/wwwroot/nur.gratis/ -d nur.gratis -d www.nur.gratis

Dann folgen 2 Dialoge. In dem Ersten gibst Du eine E-Mail-Adresse an, im darauffolgenden Dialog bestätigst Du die Nutzungsbedingungen von Let's Encrypt.

Sollte die Einrichtung erfolgreich verlaufen sein, erhältst Du eine Ausgabe die so aussehen könnte:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/nur.gratis/fullchain.pem. Your cert will
  expire on 2016-09-01. To obtain a new or tweaked version of this
  certificate in the future, simply run letsencrypt-auto again. To
  non-interactively renew *all* of your certificates, run
  "letsencrypt-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
Donating to EFF:                    https://eff.org/donate-le
Im Erfolgsfall findest Du unter »/etc/letsencrypt/live/deine-domain.de« die erstellten SSL/TLS-Zertifikate.

Sollte hier ein Fehler auftreten, könnte es sein, dass der Zugriff auf das Verzeichnis ».well-known« nicht funktioniert hat. In diesem Fall müsstes Du deine Nginx-Konfiguration nochmals anpassen, und den Schritt wiederholen.

In dieser Ausgabe siehst Du auch wie lange dein Zertifikat gültig ist. Das bedeutet, dass dieses irgendwann abläuft, daher müssen wir diesen mit Hilfe eines Cronjobs automatisch erneuern. Dazu führen wir den folgenden Befehl aus:
sudo crontab -e
Und fügen anschließend die folgenden Zeilen ein:
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/letsencrypt-renew.log
35 2 * * 1 service nginx reload
Dann speichern wir die Datei und somit ist dieser Cronjob erfolgreich eingerichtet. Jede Aktualisierung wird in der Datei »letsencrypt-renew.log« protokolliert.

Um noch eine bessere Sicherheit zu erzielen, erstellen wir zusätzlich noch eine 2048-Bit Diffie-Hellman Group mit dem folgenden Befehl:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Das nimmt ein paar Minuten in Anspruch. Danach steht die entsprechende Zertifikatsdatei unter »/etc/ssl/certs/dhparam.pem« bereit.

Schritt 4 - Nginx konfigurieren:

Nun müssen wir noch unsere Webserver-Konfiguration anpassen. Das heißt, wir stellen nun von HTTP auf HTTPS um.
Zuvor stand in unserer Konfigurationsdatei folgendes (Ausschnitt):
server {
    listen 80;
    server_name nur.gratis www.nur.gratis;
    ...
}
nun ändern/erweitern wir diese Angaben um:
server {
    listen 443 ssl;
    server_name nur.gratis www.nur.gratis;

    ssl_certificate /etc/letsencrypt/live/nur.gratis/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nur.gratis/privkey.pem;
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    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_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;
    ...
}

server {
    # 301-Weiterleitung von http:// auf https://
    listen 80;
    server_name nur.gratis www.nur.gratis;
    return 301 https://$host$request_uri;
}
Dann speichern wie diese Konfigurationsdatei und laden Nginx neu:
sudo service nginx reload
Nun sollte deine Webseite erfolgreich unter dem HTTPS-Protokoll laufen.

Schritt 5 - Let's Encrypt aktualisieren (optional)

Sollte eine neue Version von Let's Encrypt auf GitHub verfügbar sein, kannst Du das Update wiefolgt durchführen:
cd /opt/letsencrypt
sudo git pull

Tags: Let's Encrypt, Zertifikate, SSL, TLS, HTTPS, Webmaster, Homepage, Sicherheit



Aufgenommen am: 03.06.2016
Aufrufe dieser Seite: 3738