Zertifikate von Let's Encrypt in Apache, Nginx und HAProxy verwenden

Zertifikate von Let's Encrypt in Apache, Nginx und HAProxy

Seit Anfang Dezember stehen die kostenlosen Zertifikate von Let's Encrypt zur Verfügung. Mit wenig Aufwand lassen sie sich mit den üblichen Webservern wie Apache oder Nginx und mit HAProxy verwenden.

Ende 2014 ist die Initiative Let's Encrypt mit dem Ziel gestartet, kostenlose Zertifikate für jede Website bereitzustellen. Gleichzeitig baut das Projekt eine Infrastruktur auf, die eine sichere Verteilung und Updates der Zertifikate ermöglicht. Mit dem Cross-Signieren seiner Root-Zertifikate durch IdenTrust hat Let's Encrypt im Oktober 2015 die letzte Hürde für die Anerkennung der Zertifikate durch die gängigen Webbrowser genommen. Damit gelten die Zertifikate von Let's Encrypt für die Browser bereits als sicher, bevor Let's Encrypt irgendwann selbst als Root-CA (Certificate Authority) integriert wird. Hinter der Initiative steht die Internet Security Research Group ("ISRG"), der derzeit die Mozilla Foundation, Cisco, Akamai, die Electronic Frontier Foundation, die Firma Identrust und die Universität von Michigan angehören. Auch die Linux Foundation unterstützt die ISRG bei ihrem Vorhaben.

Seit Anfang Dezember läuft das offene Beta-Programm, bei dem jeder ohne vorherige Registrierung Zertifikate für die eigenen Websites anfordern kann. Die Zertifikate sind dabei durch keinerlei Beta-Status eingeschränkt, er bezieht sich lediglich auf den Betrieb und den bereitgestellten Client, der über das ACME-Protokoll die Zertifikate von den Let's-Encrypt-Servern bezieht. Außerdem gibt es diverse Limitierungen, etwa für die Anzahl von Zertifikaten pro Domain (derzeit fünf innerhalb von sieben Tagen) und die Registrieranfragen (derzeit zen in drei Stunden). Die Zertifikate sind 90 Tage gültig; die Initiative empfiehlt, sie nach 60 Tagen zu erneuern, um einen Spielraum für eventuell auftretende Fehler zu lassen. Um die Sicherheit von Zertifikaten generell zu verbessern, will Let's Encrypt alle registrierten Zertifikate über Certificate Transparency offenlegen.

Grundsätzlich bietet der von Let's Encrypt programmierte Client zwei Modi: automatisch oder manuell. Beim automatischen Modus installiert er die angeforderten Zertifikate nach dem Herunterladen automatisch und konfiguriert den Apache-Webserver entsprechend. Wer das zu gewagt findet, kann den manuellen Modus verwenden. Zusätzlich gibt es noch mehrere Methoden, sich gegenüber der Ausgabestelle zu legitimieren, denn schließlich soll nur der verifizierte Website-Betreiber für seine Site ein Zertifikat erhalten dürfen. So kann beispielsweise im Webroot-Verzeichnis eine Datei abgelegt werden, die der Let's-Encrypt-Server vor der Vergabe überprüft. Oder der Client fungiert selbst als Server, der vom Let's-Encrypt-Server kontaktiert wird. Das ist die einfachste Methode, allerdings darf zu diesem Zeitpunkt kein anderer Dienst auf Port 80 laufen, weil sonst der Client den Port nicht öffnen kann. Zuerst müssen Sie mit Git den Quellcode von Let's Encrypt herunterladen:

git clone https://github.com/letsencrypt/letsencrypt

Nun wechseln Sie ins Verzeichnis "letsencrypt" und starten den Client so:

./letsencrypt-auto certonly --standalone -d meinedomain.org

"certonly" sorgt dafür, dass die Zertifikate nur heruntergeladen, aber nicht im Webserver konfiguriert werden. "--standalone" startet wie beschrieben einen Webserver zur Legitimation. Hinter "-d" folgt die Domain, die das Zertifikat erhalten soll. Es können auch mehrere Domains aufgeführt werden. Das Tool fordert Root-Rechte oder ein Sudo-Passwort an, um die Abhängigkeiten zu installieren, zum Beispiel LibAugeas, Python-Virtualenv, LibFFI und Dialog.

Klappt alles, finden sich Zertifikate und der private Key (den der Client lokal erzeugt) im Verzeichnis "/etc/letsencrypt/live/meinedomain.org". In der Apache-Konfiguration (etwa Version 2.2) binden Sie sie beispielsweise so ein:

SSLCertificateFile /etc/letsencrypt/live/meinedomain.org/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/meinedomain.org/privkey.pem

Neben diesen beiden Dateien liegt im selben Verzeichnis noch das File "chain.pem", das die Root- und Intermediate-Zertifikate enthält. Bei Apache-Versionen kleiner 2.4.8 müssen Sie dies mit der Direktive "SSLCertificateChainFile" konfigurieren. Die außerdem dort verfügbare Datei "fullchain.pem" enthält zusätzlich noch das Zertifikat Ihrer Servers, also alle nötigen Zertifikate. Sie verwenden es für den Nginx-Webserver und Apache-Versionen ab 2.4.8. Die passenden Konfigurationszeilen für Nginx sehen etwa so aus:

ssl_certificate /etc/letsencrypt/live/meinedomain.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meinedomain.org/privkey.pem;

Außerdem finden Sie im Verzeichnis "/etc/letsencrypt" die Datei "options-ssl-apache.conf" mit Optionen für eine sichere Apache-TLS-Konfiguration, die unter anderem SSLv2 und SSLv3 deaktiviert.

Wer beispielsweise mit HAProxy SSL/TLS-Verbindungen terminieren möchte, muss die Zertifikate und den privaten Schlüssel zu einer Datei zusammenführen:

cat cert.pem fullchain.pem privkey.pem > all.pem

In der HAProxy-Konfiguration binden Sie die Datei folgendermaßen ein:

bind IP-Adresse:443 ssl crt /etc/letsencrypt/live/meinedomain.org/all.pem

Statt der manuellen Konfiguration können Apache-Anwender auch die Automatik des Let's-Encrypt-Clients verwenden. Allerdings braucht der Client dann dauerhaft Schreibrechte für die entsprechenden Verzeichnisse und muss den Webserver neu starten dürfen. Der Aufruf des Clients sieht dann so aus:

./letsencrypt-auto --apache

Neben dem offiziellen Client gibt es mittlerweile eine Reihe alternativer Projekte, die einen Client implementieren, der über das ACME-Protokoll bei Let's Encrypt Zertifikate anfordert.

Ähnliche Artikel

comments powered by Disqus
Mehr zum Thema

HAProxy: HTTPS als Default

HTTPS everywhere lautet heute die Devise. Mit HAProxy lassen sich alle ungeschützten Verbindungen auf verschlüsselte umleiten.

Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023