Verschlüsselung ist heute wieder zurecht Trend-Thema. Apple und das FBI streiten sich darüber, ob Apple die Verschlüsselung des Iphones schwächen soll, um so dem FBI und wahrscheinlich auch anderen staatlichen Organen einfacher Zugriff auf die Daten auf dem Mobilgerät zu ermöglichen. Google bevorzugt in seiner Suche Seiten, die über HTTPS übertragen und damit verschlüsselt sind. Die meisten Leute haben erkannt, dass es bei den Auseinandersetzungen schlussendlich um ihre Freiheiten geht und die Fragen: Kann jemand drittes verfolgen, was ich auf einer Seite tue und welche Informationen zwischen mir und der Seite ausgetauscht werden? Kann jemand die Daten und Informationen auf dem Weg zu mir verändern?
Damit genau dieses nicht passiert, ist auch scroom.de nur per HTTPS erreichbar. Um dies zu erreichen, muss auf dem Server ein Zertifikat vorhanden sein, welches wenn man bei den Nutzern Fehlermeldungen vermeiden möchte, von einer Zertifizierungsstelle geprüft und genehmigt worden ist. Bisher hatte ich dies mit einem Zertifikat von StartCom gelöst, die es schon seit mehreren Jahren kostenlos gab. In wenigen Tagen sollte mein altes Zertifikat auslaufen, so dass ich ein neues Zertifikat hätte erstellen müssen und auf dem Server installieren müssen. Da also sowieso ein wenig Arbeit anstand, habe ich mich dazu entschieden direkt einen Wechsel zu Let’s Enrypt durchzuführen.
Let’s Encrypt ging aus einem Projekt der Electronic Frontier Foundation, der University of Michigan und einem unabhängigen Projekt von Mozilla hervor und hat sich zum Ziel gesetzt den bisher recht komplexen Prozess der Erstellung, Validierung, Signierung, Einrichtung und Erneuerung von Zertifikaten für verschlüsselte Websites zu vereinfachen und zu automatisieren. Die verwendete Software ist quelloffen und wie auch die Zertifikate kostenlos.
Doch nun zur konkreten Einrichtung auf meinem Server (Ubuntu 14.04 LTS, Webserver Apache), bei der zunächst einem Artikel DigitalOcean Community gefolgt bin:
Zunächst muss, wenn noch nicht geschehen
git
installiert werden:
sudo apt-get update && sudo apt-get install git
Anschließend wird der Let’s Encrypt Client aus dem Git Repository geholt und in ein eigenes Verzeichnis unter
/opt
gelegt:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Das erstellte Verzeichnis anschließend betreten:
cd /opt/letsencrypt
Anschließend automatisiert das Zertifikat erstellen, validieren, signieren und einrichten per
./letsencrypt-auto --apache -d example.com -d www.example.com
Zu beachten ist, dass die erste Domain, die angegeben wird, die Basis-Domain ist (in diesem Beispiel
example.com
) und dass weitere Subdomains angegeben werden können, für die das Zertifikat gelten soll.Nachdem der Client die benötigten Abhängigkeiten installiert hat, wird man bei der Einrichtung nach einigen Daten gefragt. Unbedingt benötigt wird eine Email-Adresse. Außerdem kann man sich entscheiden, ob der komplette Verkehr über HTTPS abgewickelt werden soll, oder ob weiterhin auch HTTP-Verbindungen möglich sein sollen. Ich würde ersteres empfehlen, also die komplette Verschlüsselung.
Nachdem das Skript durchgelaufen ist, war/ist auch bereits alles fertig eingerichtet, so dass der Status des Zertifikats überprüft werden kann (Natürlich wieder
example.com
ersetzen durch den eigenen Domain-Namen):
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
Wer, wie ich noch einen eigenen Mailserver betreibt, der sollte die gerade erstellten Zertifikate noch Postfix und Dovecot bekannt machen.
Die Dovecot-Konfiguration öffnen:
sudo nano /etc/dovecot/dovecot.conf
und dort die Einträge ssl-cert
und ssl-key
suchen und nach folgendem Schema anpassen:
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
Für die Änderung der Postfix-Konfiguration können Befehle nach folgendem Schema verwendet werden:
sudo postconf -e smtpd_tls_cert_file='/etc/letsencrypt/live/example.com/cert.pem'
sudo postconf -e smtpd_tls_key_file='/etc/letsencrypt/live/example.com/privkey.pem'
sudo postconf -e smtpd_tls_CAfile='/etc/letsencrypt/live/example.com/chain.pem'
Abschließend Postfix und Dovecot einmal neu starten:
sudo service dovecot restart && sudo service postfix restart
Nun sollte Zertifikat auch bei diesen beiden geladen sein.
Um sich für die kommenden Monate die Arbeit zu erleichtern, kann abschließend noch die Erneuerung des Zertifikats automatisieren, was sinnvoll ist, da die von Let’s Encrypt ausgestellten Zertifikate nur 90 Tage gültig sind. Let’s Envcrypt empfiehlt sogar die Erneuerung nach 60 Tagen. Zertifikate, die jünger als die 60 Tage sind, werden nicht automatisch erneuert.
Angestoßen wird der Check nach Erneuerung über
./letsencrypt-auto renew
Das das Zertifikat gerade erst erstellt wurde, erneuert der Client das Zertifikat nicht. Diese Überprüfung sollte abschließend noch als Cronjob eingetragen werde und somit regelmäßig ausgeführt werden. Hierzu den crontab
öffnen:
sudo crontab -e
und folgendes eintragen:
#Woechentliche Aktualisierung des Zertifikats von Lets Encrypt
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
Abschließend speichern und den crontab verlassen. Das Aktualisierungs-Skript wird nun jeden Montag um 2:30 Uhr ausgeführt. Außerdem wird eine Logdatei geschrieben, so dass nachvollzogen werden kann, was der Client gemacht hat.
Ich muss wirklich sagen, dass ich begeistert bin, wie einfach und schnell die Einrichtung des Let’s Ecrypt Zertifikats im Vergleich zu der Einrichtung von klassischen Zertifikaten ist. Durch die Automatisierung laufen alle zukünftigen zudem noch ohne mein Zutun. Einfach nur toll!
16. Januar 2017 um 20:20
Hallo Hr. Kallenbach,
mit Interesse habe ich Ihren Artikel hier gelesen. Soweit mir bekannt ist, „friemeln“ die Scripts in der Apache-Configuration herum. Können Sie das bestätigen?
Ich habe es leider noch nicht selbst testen können, da ich mir meine Apache-Config nicht kaputt machen lassen wollte…
17. Januar 2017 um 22:46
Hallo A. Birndt,
ja die Apache Config, bzw. die enabled Sites werden von dem Skript angepasst (Der Pfad zum Key für die Verschlüsselung wird eingefügt usw.). Zur Sicherheit kann man diese ja an einem anderen Ort noch sichern. Ich habe aber mittlerweile die Prozedur schon sher häufig angewandt und hatte noch nie Probleme.
MfG
18. Januar 2017 um 8:11
Hallo A. Birndt,
außerdem gibt es, wenn einem die automatische Anpassung zu unheimlich ist, auch die Möglichkeit sich manuell ein Zertifikat zu erstellen und dies dann selber in die Apache Config einzupflegen. Wenn ich das richtig sehe, dann beschreibt das z.B. dieser Blogpost hier:
https://blog.sperrobjekt.de/content/1000480-Lets-Encrypt-Zertifikate-manuell-erzeugen.html
Mit freundlichen Grüßen
A. Kallenbach
18. Januar 2017 um 8:47
Vielen Dank für Ihre Mühe und Ihre Antwort.
Da muss ich mal schauen, und es bei Gelegenheit mal testen. Ich hatte gehofft, wenigstens eine Halbautomatische Lösung hinbekommen zu können…
Zertifikat auch automatisiert mit dem Script erzeugen und am richtigen Ort mit vorgebenem Namen ablegen und dann den VHost selbst anpassen zu können.
Danke und Viele Grüße
A. Birndt
4. August 2017 um 23:46
Eine sehr hilfreiche Anleitung. Hat wunderbar funktioniert. Vielen Dank!
17. September 2017 um 13:11
Auf meiner Seite http://www.2axels-company.de habe ich auch noch einmal einen Überblick über meinen kompletten Weg der Implementierung dargestellt. Evtl. helfen ja die Scripts und Tipps auch Dir zusätzlich weiter.