Let's Encrypt

Die neue Certification Authority in der Praxis

Bereits länger angekündigt, ist das Projekt Let's Encrypt LogoLet’s Encrypt anfangs Dezember in die Public-Beta-Phase übergegangen. Let’s Encrypt wurde von der Electronic Frontier Foundation angestossen und hat sich zum Ziel gesetzt, auf einfache Weise kostenlose Zertifikate für die Verschlüsselung von Webtraffic zur Verfügung zu stellen.

Die Issuing Certification Authority, welche im Hintergrund die Zertifikate generiert (resp. die Signing Requests signiert), ist zusätzlich zum eigenen auch mit dem Root-Key von IdenTrust signiert. Dieses Cross Signing gewährleistet, dass alle gängigen Browser und Betriebssysteme von Beginn an den ausgestellten Zertifikaten vertrauen.

Ein auf dem eigenen Webserver installierter Client sorgt dafür, dass die nötigen Keys und Zertifikate erstellt werden, dass die Registration Authority von Let’s Encrypt den Besitz des Domänen-Namens überprüfen kann und dass der Webserver passend konfiguriert wird. Der offizielle Client basiert auf Python und installiert verschiedene zusätzliche Module; deutlich zuviel Automatismus für den umsichtigen Admin.

Neben dem offiziellen Client existieren jedoch verschiedene weitere Möglichkeiten, Zertifikate von Let’s Encrypt zu beziehen. Eine schlanke Alternative für Linux-Server ist letsencrypt.sh. Das Bash-Script bietet alle nötigen Optionen und hat dennoch keine weitere Abhängigkeiten.

Neben dem Hauptprogramm letsencrypt.sh wird nur noch ein an die eigenen Bedürfnisse angepasstes config.sh benötigt:

  • BASEDIR bezeichnet den Pfad, in dem im Unterverzeichnis certs/[domain], das Script die generierten Keys und Zertifikate abgelegt.
  • WELLKNOWN definiert das Verzeichnis in welchem eine Datei zur Überprüfung der Domain geschrieben wird: Um sicherzustellen, dass es sich um eine eigene Domain handelt, muss diese Datei für die Registration Authority beim Ausstellen des Zertifikates über das Verzeichnis http://[domain]/.well-known/acme-challenge/ abrufbar sein.
  • Mit HOOK kann ein Programm angegeben werden, das u.a. nach dem Ausstellen von Zertifikaten aufgerufen wird.
  • Durch setzen von PRIVATE_KEY_RENEW=»yes» gneriert das Script auch jeweils ein neuer Private Key.

Je ein Zeilen-Eintrag in BASEDIR/domains.txt mit dem entsprechenden Domänen-Namen legt ein zu erstellendes Zertifikat fest. Alternative Namen können nach einem Leerzeichen angefügt werden (Bspw.: www.host.ch host.ch wiki.host.ch). Wildcards (*.host.ch) sind nicht erlaubt.

Das Ausführen von ./letsencrypt.sh -c

  • legt in BASEDIR ein private_key.pem und ein dazugehöriger Account bei Let’s Encrypt an,
  • generiert ein Überprüfungs-File, das von der Registration Authority abgefragt wird,
  • generiert nach erfolgreicher Überprüfung das passende Zertifikat (inkl. Key und Chain).

Im Anschluss an das erfolgreiche Ausstellen von Zertifikaten wird das per HOOK definierte Programm, mit den beiden Paramtern deploy_cert und dem Domänen-Namen, ausgeführt. Damit lässt sich ein Restart vom Webserver und beispielsweise das Löschen von alten Keys und Zertifikaten steuern.

Die von Let’s Encrypt ausgestellten Zertifikate weisen nur eine Laufdauer von 3 Monaten auf. Dies zwingt zur Automatisierung des Ausstellungsprozesses. Der Aufruf von letsencrypt.sh sollte daher regelmässig per cron geschehen.

Um Apache die Files verfügbar zu machen, sind einige Einträge pro virtuellem Host (auf Port 443) vorzunehmen:

SSLEngine on
SSLCertificateFile "[BASEDIR]/certs/[domain]/cert.pem"
SSLCertificateKeyFile "[BASEDIR]/certs/[domain]/privkey.pem"
SSLCertificateChainFile "[BASEDIR]/certs/[domain]/chain.pem"

Standardmässig bietet Apache auch noch ältere Verschlüsselungsstandards an, die vermieden werden sollten. Eine gute Ausgangsbasis schaffen folgende Parameter via ssl.conf gesetzt:

SSLCipherSuite DH+HIGH:HIGH:-ECDH:-PSK:-SRP:-3DES:-DSS:-aNULL
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on

Weiterführende Informationen zur TLS-Konfiguration lassen sich bei bettercrypto.org resp. im Applied Crypto Hardening Handbuch, bei Cipherli.st und weakdh.org finden. Die eigene Konfiguration lässt sich nun bei Qualiy SSL LABS oder SSL Decoder testen.

Zur automatischen Überprüfung kann das Programm ssl-cert-check verwendet werden: ssl-cert-check -a -s [domain] -p 443 -q -x 13 -e [e-mail-adresse]