Kurzanleitungen/Howtos

SSL-Verschlüsselung mit Let's Encrypt

26.04.2017

Sicherheitsschloß

Dank Let's Encrypt haben Sie eine schnelle Möglichkeit, für Ihre Webseite ein kostenloses SSL-Zertifikat zu erhalten, das von den meisten Browsern akzeptiert wird. Somit gibt es nun keinen Grund mehr, die eigene Webpräsenz nicht (auch zusätzlich) per HTTPs auszuliefern. Weitere nützliche Informationen erhalten Sie in freiesMagazin 2016/01.

Diesem Howto gehen wir davon aus, daß auf Ihrem Webserver bereits Apache 2.4 läuft, als Distribution Debian (oder eine auf Debian-basierende Distribution) eingesetzt wird und Sie uneingeschränkten root-Zugriff auf die Maschine haben.

Let's Encrypt installieren

Loggen Sie sich als "root" auf Ihrem Webserver ein. Installieren Sie zuerst das Paket "git", das zum Herunterladen des "Let's Encrypt"-Clients benötigt wird:

apt-get install git

Erstellen Sie ein neues Verzeichnis, in das die Let's-Encrypt-Software anschließend heruntergeladen wird:

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

Zertifikat erstellen

Sie können das SSL-Zertifikat gleich für eine Reihe von Domains erstellen lassen, unter denen Ihr Webserver von außen zu erreichen ist. Ist Ihr Webserver unter "example.com" und "www.example.com" erreichbar, so erstellen Sie das kombinierte Zertifikat mit:

./letsencrypt-auto --renew-by-default \
--server https://acme-v01.api.letsencrypt.org/directory \
-d example.com -d www.example.com auth --apache

Das Zertifikatsdateien werden in diesem Beispiel unter "/etc/letsencrypt/live/example.com/" abgelegt, da "example.com" dem 1. Domainnamenparameter entspricht.

Apache konfigurieren

Falls Sie das Apache-SSL-Modul noch nicht eingerichtet haben sollten, so holen Sie dies bitte – wie z.B. unter wiki.ubuntuusers.de beschrieben – nach. Fügen Sie nun die SSL-Dateien in die Apache-Konfigurationsdatei für Ihre Domain ("example.com" und "www.example.com" ersetzen Sie bitte durch Ihre Domainnamen) ein:

<VirtualHost *:443>
	ServerName example.com
	ServerAlias www.example.com
	[...]
	SSLEngine on
	SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
	SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem

	DocumentRoot /var/www/
	[...]
</VirtualHost>

Ggf. benötigen Sie hierzu einen neuen "VirtualHost"-Eintrag.

Algorithmen

Für zusätzliche Sicherheit sollten Sie sorgen, indem Sie nur noch als sicher angesehene Verschlüsselungsalgorithmen und Perfect Forward Secrecy einsetzen. So beugen Sie unter anderem dem Heartbleed-Bug vor und erschweren eine nachträgliche Entschlüsselung. Informationen zur Konfiguration finden Sie im Thomas Krenn Wiki.

Starten Sie abschließend Apache neu mit:

/etc/init.d/apache2 restart

Testen

Nachdem Sie Ihren Apache-Websever eingerichtet haben, sollten Sie testen, ob dieser korrekt konfiguriert ist. Hierzu sollten Sie einen oder mehrere online-Tests machen. Folgende Webseiten bieten einen solchen Service an:

Zudem sollten Sie testen, ob alle (auch von externen Webseiten eingebunden) Inhalte Ihrer Webpräsenz per HTTPs ausgeliefert werden. Denn sobald auch nur ein Bild per HTTP übertragen wird, schlägt u.A. Firefox Alarm.

Zeigt Firefox links neben der Adreßzeile ein grünes Vorhängeschloß, so wird alles auf der aktuell angezeigten Seite per HTTPs übertragen. Um sicherzugehen, sollten Sie auch die weiteren Seiten Ihrer Webpräsenz überprüfen.

Stoßen Sie auf ein Problem, so können Sie die Ursache direkt in Firefox ermitteln: Heben Sie hierzu die Blockierung von "gemischten Inhalten" auf, wie unter support.mozilla.org beschrieben. Drücken Sie anschließend die Taste "F12" zum Einblenden der Entwicklerwerkzeuge. Öffnen Sie den Reiter und laden Ihre Seite erneut. Nun sehen Sie in der Liste, welche Elemente per HTTP ausgeliefert werden und so zu einem Fehler führen.

Zertifikatserneuerung automatisieren

Die von Let's Encrypt ausgestellten Zertifikate haben (derzeit) eine Gültigkeitsdauer von 90 Tagen. Sie müssen also dafür Sorge tragen, daß das Zertifikat rechtzeitig erneuert wird. Dies können Sie am einfachsten mit einem cron-Job automatisieren. Hierzu erstellen Sie ein Skript, das Sie z.B. unter "/updates/autoUpdateCert.sh" speichern. Dieses hat den folgenden Inhalt ("example.com" und "www.example.com" ersetzen Sie bitte durch Ihre Domainnamen):

#!/bin/bash

cd /updates/letsencrypt
./letsencrypt-auto --renew-by-default \
--server https://acme-v01.api.letsencrypt.org/directory \
-d example.com -d www.example.com auth --apache
/etc/init.d/apache2 restart

Machen Sie das Skript ausführbar mit:

chmod +x /updates/autoUpdateCert.sh

Um es um 0 Uhr an jedem 1. eines Monats auszuführen, fügen Sie in "/etc/crontab" die folgende Zeile ein:

0 0 1 * * root /updates/autoUpdateCert.sh

Starten Sie abschließend "cron" neu mit:

/etc/init.d/cron restart
Achtung! Achtung! Die folgenden Anweisungen richten sich ausschließlich an fachkundige Personen. Bei jedem Schritt kann es zum kompletten Datenverlust kommen. Alle Angaben ohne Gewähr! Die Anweisungen, Skripte, etc. sind ausschließlich für Lernzwecke auf Lernsystemen und nicht für Produktivumgebungen bestimmt!