SSL einfach implementieren mit Let’s Encrypt

Aus LinuxUser 01/2016

SSL einfach implementieren mit Let’s Encrypt

© Rungaroon Taweeapiradeemunkohg, 123RF

HTTPS für alle

Das Projekt Let’s Encrypt ermöglicht es Ihnen, SSL-Zertifikate kostenlos, schnell und unkompliziert zu erstellen.

Das am häufigsten verwendete Web-Protokoll HTTP verhält sich beim Übertragen von Daten analog zu einer Postkarte oder unverschlüsselten E-Mails: Jeder, der die Daten in die Finger bekommt, kann sie auch lesen. Da Datenpakete unabhängig vom Protokoll nicht den kürzesten Weg nehmen, sondern die schnellste Übertragungsroute, kommt es vor, dass sie trotz einer eigentlich kurzen Distanz einmal um den Globus reisen, bevor sie beim Empfänger ankommen. Dabei lässt es sich nicht vermeiden, dass die Pakete an vielen potenziellen Schnüfflern vorbeiziehen.

Abhilfe schafft hier das Hypertext Transfer Protocol Secure HTTPS. Es implementiert eine verschlüsselte und authentifizierte Kommunikation zwischen Webserver und Browser. Ein Schnüffler sieht dann zwar den Verkehr zwischen den zwei Endstellen, nicht aber dessen Inhalt. Das von Netscape entwickelte Protokoll wurde bereits 1994 mit dem gleichnamigen Browser veröffentlicht. Die Authentifizierung erfolgt beim Aufbau der Verbindung via Handshake mittels Transport Layer Security (TLS) [1].

Das Problem

Sei es nun aufgrund von Wurstigkeit, technischer Unkenntnis oder aus finanziellen Gründen – auch nach über 20 Jahren kommt HTTPS noch nicht flächendeckend zum Einsatz. Rund drei Viertel des Verkehrs im Web laufen weiter über HTTP. Vertrauenswürdige Server-Zertifikate gibt es kaum kostenfrei, für private Server-Betreiber rechnen sich die mit jährlichen Kosten verbundenen Zertifikate oft nicht.

Die von Firmen wie StartSSL [2] oder Organisationen wie CAcert [3] kostenlos erhältlichen Zertifikate stellen viele Betreiber eines V-Servers vor technische Hürden beim Implementieren auf den Server. Alternativ greifen manche zu selbst signierten Zertifikaten, auch als Snakeoil-Certs bekannt. Diese Zertifikate laden die Seite dann zwar mit HTTPS, veranlassen die meisten Webbrowser aber dazu, dem Anwender eine Warnmeldung zu präsentieren. Diese besagt, dass es sich um eine nicht vertrauenswürdige Seite handle, man aber eine Ausnahmegenehmigung erstellen könne (Abbildung 1). Das verunsichert Besucher, die den Betreiber nicht kennen; wiederkehrende Gäste nervt es schlicht. Der Sicherheit dient das nur bedingt, dem Renommee der Seite keinesfalls.

Abbildung 1: Bei selbst signierten und damit nicht vertrauenswürdigen Zertifikaten zeigen die meisten Webbrowser eine Sicherheitswarnung an.

Abbildung 1: Bei selbst signierten und damit nicht vertrauenswürdigen Zertifikaten zeigen die meisten Webbrowser eine Sicherheitswarnung an.

Vertrauenswürdige Zertifikate stellen Dienstleister oder Organisationen aus, die den Status einer Zertifizierungsstelle besitzen, sogenannte Certificate Authorities (CAs). Der Kasten “Was ist eine CA?” erklärt, was es mit den Zertifizierungsstellen auf sich hat. Gilt eine CA als vertrauenswürdig, so übernehmen die Softwarehersteller das Root-Zertifikat in ihre Webbrowser, die dann aufgerufene Webseiten automatisch als entsprechend geschützt erkennen.

Was ist eine CA?

Die Aufgabe einer CA besteht unter anderem darin, öffentliche Schlüssel zu beglaubigen und entsprechende signierte Bescheinigungen auszustellen. Diese digitalen Zertifikate richten sich heute zumeist am X.509-Standard aus. Besuchen Sie eine mit HTTPS verschlüsselte Webseite, können Sie sich durch einen Klick auf das Schloss in der Adresszeile des Browsers (links von der URL) die Eckpunkte des zugrundeliegenden Zertifikats anzeigen lassen.

Die Lösung

Das Projekt Let’s Encrypt [4] trat vor rund einem Jahr an, um HTTPS möglichst flächendeckend zu etablieren. Die Initiative wurde als erstes Projekt der neu gegründeten Organisation Internet Security Research Group (ISRG [5]) gestartet und im April 2015 unter den Schirm der Linux Foundation gestellt. Zu den Unterstützern des Projekts zählen Mozilla, die Electronic Frontier Foundation (EFF), Cisco, Akamai, IdenTrust und Forscher der Universität von Michigan; Josh Aas von Mozilla leitet das Team. Völlige Transparenz gilt als eines der obersten Gebote des Projekts – dazu gehören auch regelmäßige Transparenzberichte, der erste davon liegt bereits als PDF vor [6].

Um die Zielsetzung zu erreichen, sieht Let’s Encrypt vor, X.509-Zertifikate [7] für TLS kostenlos und möglichst unkompliziert anzubieten. Deren Implementierung und Konfiguration stößt der Admin per Kommandozeile auf dem Server an, Erneuerungen erfolgen automatisch. Das stellt in der Handhabung einen Riesenschritt nach vorne dar und ermöglicht das Implementieren eines Zertifikats für den Webserver, ohne sich vorher intensiv mit Kryptografie und Webserver-Konfiguration befassen zu müssen.

In den Startlöchern

Let’s Encrypt besitzt mittlerweile den offiziellen Status einer CA. Am 12. September begann ein geschlossener Beta-Test, seit Mitte Oktober stehen die beiden Zwischenzertifikate Let’s Encrypt Authority X1 und Let’s Encrypt Authority X2 bereit. Da die CA IdenTrust [8] sie gegengezeichnet hat, werden Sie von allen Webbrowsern akzeptiert. Am 3. Dezember ging die bis dahin geschlossene Betaphase in einen offenen Beta-Test ohne Warteliste oder Registrierung über.

Während des geschlossenen Beta-Tests stellte Let’s Encrypt bis Anfang November bereits mehr als 11?000 Zertifikate aus. Die dort erhaltenen Rückmeldungen gestatten es, jetzt an die Öffentlichkeit zu gehen. Die Software zum Ausstellen der Zertifikate und zum Legitimieren der Domain-Inhaber als Verfügungsberechtigter der Domain, für die das Zertifikat gelten soll, steht bis auf die automatische Erneuerung der Zertifikate zum Einsatz bereit. Sie beruht auf dem eigens entwickelten Automated Certificate Management Environment-Protokoll (ACME) [9]. Für das Frühjahr 2016 sieht das Projekt den Übergang in den Regelbetrieb vor.

Die Praxis

Derzeit legt das Projekt die Software für den Apache-Webserver unter Debian und dessen Derivaten aus. Ein Plugin für Nginx befindet sich noch im experimentellen Stadium, Sie sollten es deshalb nicht auf Produktivservern anwenden. Die Portierung für Microsoft Windows IIS nahm die Community bereits in Angriff. Weiterentwicklungen und Plugins von Dritten nimmt das Projekt gerne in die Client-Software auf, sofern sie den Anforderungen entsprechen. Das erhöht die Wahrscheinlichkeit, dass die Software in absehbarer Zeit auch für andere Webserver zur Verfügung steht.

Um Let’s Encrypt zu verwenden, installieren Sie auf dem Server zunächst Git (Listing 1, Zeile 1). Dann wechseln Sie in das Home-Verzeichnis des Servers und laden die Software von GitHub herunter (Zeile 2). Wechseln Sie nun in das neu entstandene Verzeichnis letsencrypt/ und stoppen Sie den Webserver mit dem Kommando /etc/init.d/apache2 stop oder sudo service apache2 stop. Danach stoßen Sie das Erstellen des Zertifikats und dessen Installation an (Zeile 5). Dabei ersetzen Sie die Beispiel-Domain example.de durch jene, für die das Zertifikat gelten soll. Sie dürfen an dieser Stelle auch mehrere Domains angeben, die im gleichen Webroot liegen, wozu Sie jeder davon ein -d voranstellen.

Listing 1

$ sudo apt-get update && apt-get install git
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ [... Webserver stoppen ...]
$ sudo ./letsencrypt-auto --rsa-key-size 4096 -d example.de

Im Hintergrund überprüft die Software, ob Sie über die Domain verfügen können. Auf die Abfrage, ob Sie Apache oder einen temporären Webserver nutzen wollen (Abbildung 2), bestätigen Sie im Regelfall die Voreinstellung zu Apache. Eine weitere Abfrage klärt, ob alle Inhalte der Domain mit HTTPS ausgeliefert werden sollen. Wissen Sie nichts Gegenteiliges, bejahen Sie auch diese Abfrage. Kurz darauf ist Ihr Zertifikat installiert und zum Einsatz bereit. Eine Benachrichtigung verweist auf eine Seite zur Validierung Ihres Zertifikats. Bevor Sie dem Link folgen, starten Sie den Webserver mit /etc/init.d/apache2 start oder sudo service apache2 start.

Abbildung 2: Let's Encrypt bietet als Voreinstellung den Apache Server als Konfigurationsziel an: In der Regel übernehmen Sie diese.

Abbildung 2: Let’s Encrypt bietet als Voreinstellung den Apache Server als Konfigurationsziel an: In der Regel übernehmen Sie diese.

TIPP

Liefern Sie Werbung von Dritten auf Ihrer Webseite aus, fragen Sie vor dem Implementieren von HTTPS besser den Werbetreibenden, ob seine Anzeige auch mit HTTPS funktioniert.

Sie können auch ein Zertifikat lediglich erstellen, ohne es zu implementieren (Listing 2, erste Zeile). Auf diesem Weg kommen auch Anwender von Nginx bereits jetzt in den Genuss der freien Zertifikate. Um das Zertifikat im Nachhinein automatisch in Apache zu implementieren, verwenden Sie den Befehl aus der zweiten Zeile von Listing 2. Auch hier ersetzen Sie die Beispiel-Domain wieder durch Ihre eigene.

Die Software erlaubt das Erstellen von bis zu zehn Subdomains der Art sub1.example.de sub2.example.de … mit einem Befehl. Dies zählt als ein Zertifikat. Derzeit erlaubt Let’s Encrypt das Erzeugen von bis zu zehn Zertifikaten für TLDs innerhalb von zwei Monaten – diese Anzahl soll sich später erhöhen. Fühlen Sie sich in Sachen Apache-Webserver nicht ganz sattelfest, empfehlen wir, einige Wochen abzuwarten, bis Let’s Encrypt in den Regelbetrieb übergeht.

Listing 2

$ sudo ./letsencrypt-auto certonly --rsa-key-size 4096 -d example.de
$ sudo ./letsencrypt-auto install --apache --cert-path /etc/letsencrypt/live/example.de/cert.pem --key-path /etc/letsencrypt/live/example.de/privkey.pem --chain-path /etc/letsencrypt/live/example.de/chain.pem

Ergebnisse

Den Vorgang testeten wir sowohl unter Ubuntu Server 15.04 mit Apache 2.4.7-1ubuntu4.8 als auch auf Debian “Jessie” mit Apache 2.4.10-10+deb8u3. Das Ergebnis hat uns beeindruckt: Die Vorarbeiten mit dem Herunterladen und Installieren des Clients auf den Server waren in rund drei Minuten erledigt, das Erzeugen und Implementieren des Zertifikats dauerte weniger als eine Minute. Die Testseite ließ sich sofort mit HTTPS aufrufen, der anschließende Test auf der Seite von Qualys SSL Labs [10] bestätigte die erfolgreiche Implementierung (Abbildung 3). Die technischen Details des Zertifikats sehen Sie, wenn Sie die Sicherheitseinstellungen der Seite in Firefox öffnen (Abbildung 4).

Abbildung 3: Der SSL-Test von Qualsys attestierte der Implementierung einwandfreie Funktion.

Abbildung 3: Der SSL-Test von Qualsys attestierte der Implementierung einwandfreie Funktion.

Abbildung 4: Der Firefox-Browser liefert detaillierte Informationen über das Zertifikat.

Abbildung 4: Der Firefox-Browser liefert detaillierte Informationen über das Zertifikat.

Ein weiterer Vorteil von Let’s Encrypt führt derzeit noch zu etwas Handarbeit: Die Zertifikate des Projekts beschränken sich aus Gründen der Sicherheit derzeit auf eine Gültigkeitsdauer von drei Monaten. Sobald die CA den Regelbetrieb einmal aufnimmt, sollen die Zertifikate automatisch erneuert werden. Da eine Implementation dieser Funktion aber bislang noch aussteht, obliegt es derzeit dem Inhaber, durch erneutes Ausführen der Software das Zertifikat vor Ablauf der Gültigkeit zu erneuern. Das erledigen Sie entweder manuell durch den erneuten Aufruf des Befehls oder über einen Cronjob. Der Vorgang zieht das aktuelle Zertifikat automatisch zurück und tauscht es gegen ein neues aus.

Hintergründig

Dem in Python geschriebenen Let’s-Encrypt-Client obliegt sowohl die Kommunikation mit der CA während des Erstellens als auch die Konfiguration des Servers beim Implementieren des Zertifikats. Zunächst erzeugt das Skript auf dem Server ein Schlüsselpaar, dessen öffentlichen Schlüssel die CA signiert. Die Schlüssel liegen unterhalb von /etc/letsencrypt/live/ unter dem jeweiligen Domain-Namen. Dann stellt die Software mit dem öffentlichen Schlüssel einen Certificate Signing Request (CSR) aus, also eine Anfrage zum Signieren eines Zertifikats.

Nun muss die CA prüfen, ob sich der Server, von dem aus Sie den Prozess angestoßen haben, über die entsprechende Domain erreichen lässt. Dazu erzeugt das Skript eine per HTTP erreichbare Datei auf dem Server, welche die CA abfragt. Das genügt als Authentisierung für Klasse-1-Zertifikate.

Nach dem positiven Abschluss der Prüfung stellt die CA das Zertifikat aus und legt es zusammen mit dem privaten Schlüssel ebenfalls unterhalb von /etc/letsencrypt/live/ ab (Abbildung 5). Es empfiehlt sich, nach Abschluss der Installation eine Sicherung dieses Verzeichnisses anzulegen. Im letzten Schritt bindet das Skript das Zertifikat in die Server-Struktur ein und zeigt eine Erfolgsmeldung. Die Zertifikate werden in der Regel unter /etc/apache2/sites-enabled eingebunden. Weitere technische Einzelheiten stellt das Let’s-Encrypt-Projekt im Rahmen seiner Dokumentation zur Verfügung [11].

Abbildung 5: Die Software speichert den privaten Schlüssel zusammen mit den Zertifikaten unterhalb des Verzeichnisses <code srcset=

/etc/letsencrypt/live/. Es empfiehlt sich, davon eine Sicherungskopie zu erstellen.” width=”300″ height=”103″ /> Abbildung 5: Die Software speichert den privaten Schlüssel zusammen mit den Zertifikaten unterhalb des Verzeichnisses /etc/letsencrypt/live/. Es empfiehlt sich, davon eine Sicherungskopie zu erstellen.

Fazit

Let’s Encrypt stellt eine revolutionär einfache neue Methode für das Erzeugen und Installieren von vertrauenswürdigen SSL-Zertifikaten bereit. Binnen lediglich eines Jahres brachten die Entwickler das neue Paradigma zur Einsatzreife und ermöglichen damit endlich jedem Server-Betreiber, kostenlos, unkompliziert und schnell zu einer sichereren Webpräsenz zu kommen. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 01/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben