Kostenlose TLS-Zertifikate mit Let's Encrypt


Das Let’s Encrypt Projekt (hinter dem unter anderem Mozilla, Facebook und Cisco als Sponsoren stecken) ist gestern in den Public Beta Betrieb übergegangen. Von nun an können nach belieben kostenlose TLS (aka SSL)-Zertifikate für die eigenen Domains erstellt werden. Für den Erhalt eines Zertifikats sind nur wenige, einfache Schritte erforderlich, die ich im Folgenden erkläre:

Let’s Encrypt nutzt ein Protokoll namens “ACME” zur Kommunikation mit den CA-Servern. Ich habe den Referenz-ACME-Client “Certbot” von LE genutzt - um den soll es hier gehen. Außerdem wird der Client in dieser Anleitung direkt auf dem Zielserver ausgeführt - das ist die einfachere Methode. Wer den Client nicht auf dem Zielserver der Domains ausführen will oder kann (oder den laufenden Webserver-Betrieb nicht unterbrechen will), kann alternativ den “Manual Mode” verwenden (siehe Dokumentation unter: https://certbot.eff.org/docs/)

Certbot ACME-Client installieren

Schaltet euch (als root!) via SSH auf euren Server auf und installiert zuerst Certbot:

git clone https://github.com/certbot/certbot
cd certbot

Zertifikate abholen

Bevor der Client gestartet werden kann, muss der Webserver auf dem Host kurz abgeschaltet werden, damit Port 80 für den Certbot zur Verfügung steht. Danach kann es mit der Zertifikatsanfrage weitergehen:

./certbot-auto certonly --standalone --rsa-key-size 4096 -d thomas-leister.de -d www.thomas-leister.de

Die “certonly” Option sorgt dafür, dass die Zertifikate nur abgeholt und gespeichert werden und nicht automatisch in vorhandene Webserver-Konfigurationen eingebunden werden. Es ist mir lieber, die Webserver-Konfiguration selbst von Hand vorzunehmen, statt sie automatisch ändern zu lassen. Außerdem ist aktuell noch keine zuverlässige Auto-Konfiguration für meinen Nginx-Webserver verfügbar.

Mit dem –rsa-key-size Parameter wird die Länge für den zu generierenden RSA Private Key auf 4096 Bits gesetzt (statt der standardmäßig gesetzten 2048 Bit). Danach folgen mit “-d” die Domains, für die das Zertifikat gelten soll. Vor jede Domain wird ein “-d” gestellt.

Nach Eingabe der E-Mail Adresse und der Zustimmung zu den Nutzungsbedingungen (nur einmalig!) wird das gewünschte Zertifikat vom ACME-Server abgeholt und in /etc/letsencrypt/live/[domain] gespeichert. Dort liegen vier verschiedene Dateien:

  • cert.pem (Das öffentliche Zertifikat in Reinform)
  • chain.pem (Öffentliches Zertifikat aus der sog. Keychain)
  • fullchain.pem (entspricht cert.pem + chain.pem)
  • privkey.pem (Der private Schlüssel)

Zertifikat am Webserver einrichten

Welches Zertifikat nun wofür? Das hängt vom Webserver ab. Mein Nginx-Webserver benötigt nur zwei Zertifikatsdateien: Das öffentliche Zertifikat inkl. Keychain (fullchain.pem) und das den privaten Schlüssel (privkey.pem). Die Nginx-Konfiguration sieht also so aus:

ssl_certificate /etc/letsencrypt/live/thomas-leister.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/thomas-leister.de/privkey.pem;

Apache benötigt 3 Dateien für eine korrekte TLS-Konfiguration: cert.pem, chain.pem und privkey.pem. Eine Konfiguration könnte z.B. so aussehen:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/thomas-leister.de/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/thomas-leister.de/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/thomas-leister.de/privkey.pem

[Update]: (Danke @Maurice) Ab Apache 2.4.8 (ab Ubuntu 15.04 vivid) sollte auf das “SSLCertificateChainFile” verzichtet werden, und stattdessen (ähnlich wie bei Nginx) nur “SSLCertificateFile” mit “fullchain.pem” statt cert.pem genutzt werden:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/thomas-leister.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/thomas-leister.de/privkey.pem

Nachdem die Webserver-Konfiguration angepasst wurde, könnt ihr euren Webserver wieder starten und prüfen, ob die TLS-Zertifikate ordnungsgemäß funktionieren. Das war’s auch schon!

Vergesst nicht, dass Let’s Encrypt Zertifikate nur 90 Tage lang gültig sind und nach diesem Zeitraum (besser schon vorher!) erneuert werden müssen. Dazu stellt ihr einfach noch einmal eine Zertifikatsanfrage (wie oben) und willigt dem Widerruf der alten Zertifikate ein. Die Webserver-Konfiguration muss nicht umgestellt werden.

Eine vollständige Dokumentation zum offiziellen Let’s Encrypt Client findet ihr übrigens hier: https://certbot.eff.org/docs/