Let’s encrypt – Verschlüsselung der persönlichen Webseite ganz einfach

Möchte man verhindern, dass Informationen der persönlichen Webseite im Klartext übermittelt werden, kommt man um ein SSL Zertifikat nicht herum. Ein solches Zertifikat gibt es gratis…

Eigentlich ist es absurd, wenn man sein Blog, sein Forum oder jeglicher sonst irgendwie geartete Webdienst ohne Verschlüsselung betreibt. Auch das beste Passwort und das noch so regelmässig gewartete System nützt nichts, wenn die Informationen im Klartext übermittelt werden und von jedem, mit minimalstem Aufwand, abgefangen und ausgewertet werden kann.

Um diesem Manko abzuhelfen, veröffentlichte Netscape Communications im Jahr 1994 die erste Version des Secure Sockets Layer (SSL). Im Jahre 1999 wurde der Transport Layer Security (TLS) 1.0, als Nachfolger von SSL 3.0 eingeführt. Obwohl mittlerweile nur noch TLS eingesetzt wird, wird oft noch die alte Bezeichnung «SSL» verwendet.

In der Vergangenheit gab es zwei Gründe für die Abwesenheit von Verschlüsselung auf dem eigenen Webserver: Die Kosten und der Aufwand!

Ein Zertifikat für eine einzelne Domain kostete vor einigen Jahren ein Vermögen und auch noch bis vor einem Jahr bezahlte man typischerweise zwischen 30.- bis 60.- Franken pro Jahr und Zertifikat.

Die letzten Jahre etablierten sich immer mehr Dienste, welche kostenlos sogenannte Domain Validation SSL Zertifikate anboten. Die Erstellung dieser war, aus Sicht des Otto-Normalverbrauchers, nicht benutzerfreundlich, kompliziert und aufwändig.

Es mussten zu viele Schritte manuell abgearbeitet werden, welche ohne notwendige Kenntnis der eingesetzten Tools schnell in Frustration ausarten konnte. Dieser aufwändige Prozess musste in regelmässigen Abständen, typischerweise jedes Jahr, wiederholt werden, um das Zertifikat zu erneuern.

Es verwunderte also nicht, dass nur ein kleiner Prozentsatz der privaten Betreiber von Webseiten bzw. -diensten sich mit dem Thema Verschlüsselung auseinandersetzten.

Let’s encrypt – Lasst uns loslegen

Eines der grossen Vorteile des „Let’s Encrypt“ Projektes, welches am 3. Dezember 2015 offiziell den BETA-Status verlassen hat, ist die automatisierte Erstellung und Installation des X.509-Zertfikates für TLS. Dieser Automatismus ersetzt die Erstellung, Validierung, Signierung und (wenn gewünscht) die Einrichtung von Zertifikaten für verschlüsselte Webseiten. Der Prozess ist so aufgebaut, dass sogar die Erneuerung, welche alle 90 Tage stattfinden muss, komplett automatisiert durchgeführt werden kann. Eine Begründung für die 90 Tage „lifetime“ der Zertifikate findet Sie im Übrigen auf https://letsencrypt.org/2015/11/09/why-90-days.html.

Kernstück dieses automatisierten Prozesses ist das Automated Certificate Management Environment (ACME). Durch den offenen Standard von ACME gibt es mittlerweile verschiedenste Clients und Projekte, welche im Umlauf sind. Im Let’s Encrypt Community Forum findet man unter https://community.letsencrypt.org/t/list-of-client-implementations/2103 eine Übersicht.

An dieser Stelle zu erwähnen: Nachdem ein Zertifikat einmal erfolgreich ausgestellt wurde, erfolgt die Erneuerung für die entsprechende Domain immer über ein bestehendes Zertifikat zum Einsatz. Geht dieses verloren, muss ein Zertifikat bei einem anderen Aussteller für mind. 3 Monate beantragt werden.

Deshalb Backup, Backup, Backup!!!

Das Let’s Encrypt Projekt

Ziel des Projektes ist es verschlüsselte Verbindungen im Web zum Standard zu machen. Zu diesem Zweck werden sogenannte Domain Validation Zertifikate, mittels eines automatisierten Prozesses, ausgestellt.

Anbieter dieses Service ist die Internet Security Research Group (ISRG) und Hauptsponsoren sind die Electronic Frontier Foundation (EFF), Mozilla Foundation, Akamai, Cisco Systems, OVH und chrome. Daneben gibt es eine Vielzahl weiterer Sponsoren (komplette Liste aller Sponsoren).

Einrichten ganz einfach

 certbot läuft zum ersten Mal - inkl. Abfrage zur e-Mail und Rückmeldung das Zertifikat erfolgreich erstellt wurde.

certbot läuft zum ersten Mal - inkl. Abfrage zur e-Mail und Rückmeldung das Zertifikat erfolgreich erstellt wurde.

Mittlerweile bieten viele Schweizer-Webhoster wie z.B. Hosttech, Cyon, hostpoint, METANET, etc. die Let’s Encrypt Lösung ebenfalls an. Wie die Aktivierung in diesen Fällen durchgeführt werden muss, entnehmen Sie bitte den entsprechenden Support-Dokumenten ihres Webhosters. Bei Hosttech, welcher meine Seiten hostet, dauerte die Aktivierung keine Minute und bis jetzt funktionierte alles wunderbar.

Da ich aber noch etwas Infrastruktur zu Hause betreibe, welche ebenfalls Webdienste zur Verfügung stellen, musste auch auf diesen, nachdem mein Zertifikat von Comodo auslief, ein neues Zertifikat installiert werden.

Zur Installation sind folgende Schritte auszuführen

  1. Sicherstellen das alle (Sub)-Domänen über einen korrekten DNS Eintrag verfügen
  2. Installation des certbot von Let’s Encrypt
  3. Erzeugen der Zertifikate
  4. Aktivieren der Zertifikate für DOVECOT, EXIM4 und APACHE2
  5. Cron-Job einrichten

Alle Sub-Domains mit korrektem DNS Eintrag versehen

Da ich mehrere Aliase (welche teilweise auf dieselbe IP-Adresse zeigen) verwende, musste zuerst sichergestellt werden, dass alle Sub-(Domains), welche im Zertifikat berücksichtig werden sollen, korrekt aufgelöst werden. Wie dies genau gemacht wird, unterscheidet sich von Anbieter zu Anbieter, welcher Ihre DNS Einträge verwaltet.

Installation des certbot

Um allfällige Komplikationen zu vermeiden, entschied ich mich den cerbot von Let’s Encrypt zu verwenden. Detailierte Installationsanleitungen für alle möglichen Systmen finden sich auf der Webseite des certbot.

Untenstehendes Beispiel zeigt die Installation auf Debian Wheezy, welches ich noch auf meinem Virtual-Host einsetze.

Zuerst muss das certbot Script heruntergeladen und zur Ausführung freigegeben werden. Dazu wechseln Sie ins Verzeichnis, in welches der certbot installiert werden soll.

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Erzeugen der Zertifikate

Als nächstes sind die notwendigen Zertifikate zu erzeugen. Sind mehrere Domains im Zertifikat zu hinterlegen, so kann dies mit dem Parameter -d gemacht werden. Zudem möchte ich die Anpassungen auf meinem apache2 Server nicht automatisch durchführen lassen, sondern manuell durchführen.

./certbot-auto --apache certonly -d service1.roger-zueger.ch -d service2.roger-zueger.ch -d service3.roger-zueger.ch

Bei der ersten Ausführung werden noch weitere Komponenten installiert. Anschliessend müssen eine gültige e-Mail Adresse angegeben werden und die Terms-of-Service (TOS) akzeptiert werden. Diese Informationen können auch mittels entsprechenden Parametern übergeben werden (Details siehe certbot-Dokumentation).

Da ich (noch) nicht alle Sub-Domains in einer entsprechenden Konfigurationsdatei berücksichtig wurde, meldete sich der certbot und wollte wissen, welche Konfiguration er anpassen soll. Hier kann ohne Probleme mehrmals dieselbe apache2 Konfigurations-Datei angeben werden (z.B. default-ssl).

Die Zertifikate sind nun alle in /etc/letsencrypt/live/<domain.tld> abgelegt.

Installation der Zertfikate

Das Auswechseln des Zertfikates in der Apache2 Konfiguration ist eine kurze Angelegenheit. Dazu die beiden Einträge im Konfigurationsfile im Verzeichnis /etc/apache2/sites-available anpassen.

SSLCertificateFile /etc/letsencrypt/live/<domain.tld>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<domain.tld>/privkey.pem
Anschliessend müssen noch die Dateien von EXIM4 unter /etc/exim4 mit den Zertifikat und dem privaten Schlüssel ersetzt werden.

cp /etc/letsencrypt/live/<domain.tld>/fullchain.pem /etc/exim4/exim.crt
cp /etc/letsencrypt/live/<domain.tld>/privkey.pem /etc/exim4/exim.key

Da ebenfalls ein dovecot Server im Einsatz ist, muss dieser ebenfalls mit dem neuen Zertifikat beglückt werden. Die Anpassung ist ebenfalls sehr einfach.
In der Konfigurationsdatei /etc/dovecot/config.d/10-ssl.conf die beiden Einträge wie folgt anpassen

ssl_cert = < /etc/letsencrypt/live/<domain.tld>/fullchain.pem
ssl_key = < /etc/letsencrypt/live/<domain.tld>/privkey.pem

Nun noch die Services neu starten und das Zertifikat ist aktiv.

Cron-Job für die Erneuerung der Zertifikate

Damit das Zertifikat in Zukunft automatisch erneuert wird, sollte ein entsprechender Eintrag in die Cron-Job Tabelle vorgenommen werden.

0 0 * * * /bin/certbot/certbot-auto renew -q --post-hook "/scripts/cert_renew.bin" # check daily if certificates is near to expire and replace if needed

Stellt der certbot fest, dass das Zertifikat in den nächsten 30 Tagen ausläuft, erneuert er es automatisch und führt anschliessend das Script /script/cert_renew.bin aus. Dieses Script ist sehr simpel und macht nichts anderes als das neue Zertifikat ins /etc/exim4 Verzeichnis zu kopieren, die Services apache2, dovecot und exim4 neu zu starten und ein Backup von LetsEncrypt anzulegen. Ist keine Erneuerung des Zertifikates notwendig, bricht der certbot ab und auch die –post-hook Aktion wird nicht ausgeführt.

Weitere Informationen

That’s all folks