Seit knapp einem Jahr maximal nutzte ich Cloudflare. Nicht unbedingt um den Webserver zu entlasten oder das Caching zu nutzen. Ich hatte Cloudflare eigendlich nur vor meinen Server gesetzt, um einfach, ohne viel installieren und konfigurieren, die Seite mit SSL zu verschl├╝sseln. Vor Cloudflare hatte ich mir Zertifikate bei StartSSL erstellt. Da das aber meine ersten Zertifikate waren, mit denen ich gearbeitet habe, ist das nat├╝rlich gr├╝ndlich in die Hose gegangen, es hat nichts gepasst, da Private Key und Zertifikat vertaucht, gel├Âscht, weis ja auch nicht mehr. Widerrufen ging nicht. Ich war verzweifelt. Au├čerdem konnte nur eine bestimmte Anzahl an Zertifikaten ausgestellt werden, soweit ich mich entsinne. Es musste etwas einfaches her, das funktioniert.

Cloudflare ist einfach. Ich musste nur meine┬áDNS-Eintr├Ąge ├╝bernehmen, der Rest geht von alleine. Und es ist verschl├╝sselt.┬áZumindest sah es so aus. Aber Cloudflare ist mit den Antwortzeiten nicht all zu flott. Und Bandbreite spare ich auch nicht wirklich, da die SSL Verbindung nicht gecached wird. Das dann noch jemand zwischen mir und meiner Website steht, der mith├Âren k├Ânnte, nur f├╝r SSL, …naja. Gut, es gibt hier nichts, was jemandem schaden w├╝rde, wenn es mitgelesen wird. Es geht hier jedoch ums Prinzip. Cloudflare sichert eben nur die Webseiten. Und ich habe immer noch kein Zertifikat.

Let’s Encrypt!

Zum 3.12.2015 ist Let’s Encrypt in die Public Beta gestartet. Darauf habe ich lange gewartet. Let’s Encrypt stellt kostenlose Zertifikate aus, die von Browsern akzeptiert werden. Erstellt und erneuert werden die Zertifikate vom eigenen Server mit deren Tool. Hat man einmal alle Domains konfiguriert, kann man sich einen cronjob anlegen, der die Zertifikate automatisch erneuert. F├╝r mich eine sehr feine Sache, die sehr gut funktioniert.

Zum Setup

Cloudflare macht jetzt nur noch DNS. Da werde ich aber bei Cloudflare bleiben, denn die DNS Updates gehen dort sehr flott. Das ist f├╝r mein┬áDynDNS ┬á├╝ber deren API wichtig.┬áVerschl├╝sslung also ├╝ber die Let’s Encrypt Zertifikate.

Zum Erstellen der Zertifikate muss Let’s Encrypt feststellen, ob die Domain auch mir geh├Ârt. Die Domain zeigt auf meinen Server. W├╝rde Sie nicht mir geh├Âren, w├╝rde Sie woanders hin zeigen. Das Kommandozeilen-Tool fragt also nach, wo das Root-Verzeichnis der Domain auf dem Webserver liegt. In diesem Ordner legt es einen Verzeichnis „.well-known/acme-challenge/“ an. Und dar├╝ber verifiziert Let’s Encrypt dann das Zertifikat,indem das Tool dort z.B. eine Datei mit dem Namen zuf├Ąlligen Namen „c1705ca5f38296a04e9e5f9e55533eae21609a8c“ ablegt und gleichzeitig an den Verifizierungsserver eine Anfrage sendet, ob unter der Domain diese Datei abgelegt ist. Kann der Server das best├Ątigen, geh├Ârt das Zertifikat dir. So mal im Groben. Da ich mehrere Root-Verzeichnisse zu mehreren Domains habe, hab ich mir die M├╝he erspart, jede Domain zu ihrem Verzeichnis zu verlinken, sondern habe einen „.well-known/acme-challenge/“ Ordner erstellt und Apache gesagt, egal bei welcher Anfrage, egal welche Domain, ist das Verzeichnis, auf das zugegriffen werden soll „.well-known/acme-challenge/*“, nutze dieses Verzeichnis. In der apache2.conf sieht das dann wie folgt aus:

Alias /.well-known "/etc/letsencrypt/.well-known/"
RewriteEngine On

<IfModule mod_headers.c>
<LocationMatch "/.well-known/acme-challenge/*">
Header set Content-Type "application/jose+json"
RewriteEngine Off
</LocationMatch>
</IfModule>

Und der Befehl zum erstellen bzw. erneuern sieht dann wie folgt aus:

./letsencrypt-auto --renew-by-default --server https://acme-v01.api.letsencrypt.org/directory certonly --webroot -w /etc/letsencrypt -d meinedomain.de -d www.meinedomain.de -d meinezweitedomain.de

Jetzt m├╝ssen die VHosts noch mit den Zertifikaten konfiguriert werden. Let’s Encrypt erstellt beim erneuern immer ein neues Zertifikat unter neuem Namen, legt aber immer einen Link mit dem Namen der Domain (ohne Subdomains, da diese in dem Zertifikat mit drin sind) auf das neu erstellte Zertifikat. Wir m├╝ssen also nur einmal den Link in unseren VHosts anlegen.

<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/meinedomain.de/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/meinedomain.de/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/meinedomain.de/chain.pem
</IfModule> 

cert.pem, privkey.pem und chain.pem sind also jeweils nur Verlinkungen zu den Zertifikaten, die erstellt wurden.

Wichtig ist, dass man nach dem erneuern der Zertifikate den z.B. Webserver neu Startet, dass er das Zertifikat neu l├Ąd. Bei Apache gen├╝gt es auch, mod_ssl neu zu starten.