Let’s Encrypt: Verschlüsselung mit SSL/TLS unter Nginx

Let’s Encrypt ist ein noch recht junges (2015) und großartiges Projekt. Mehrere Internet-Dienstleister, darunter die Electronic Frontier Foundation (EFF), Mozilla, Google, Cisco und mehrere Universitäten unterstützen dieses Projekt.

Damit sollen über TLS/SSL verschlüsselte Verbindungen zum Standard im Internet werden, indem die Zertifizierung kostenlos und einfacher wird.

Das Zeitalter vor Let’s Encrypt

Bevor Let’s Encrypt ins Leben gerufen wurde, waren TLS/SSL-Zertifikate in der Regel nur gegen einen jährlichen Betrag erhältlich. Dieser ging an die Zertifizierungsstellen. Außerdem musste der Nutzer via E-Mail verifizieren, dass er tatsächlich der Inhaber der Domain ist.

Let’s Encrypt hat diesen Prozess weitgehend automatisiert. TLS/SSL-Zertifikate können über eine einzige Software aktiviert werden, die mittels API mit Let’s Encrypt interagiert. Dadurch, dass die Software auf dem jeweiligen Server installiert wird, kann direkt die (tatsächliche) Inhaberschaft über die Domain verifiziert werden.

Die generierten Zertifikate können unter Umständen sogar automatisch in die Server-Konfiguration integriert werden. Sie haben eine Laufzeit von 90 Tagen und können automatisch verlängert werden.

Werbung

HowTo: Let’s Encrypt unter Nginx

Unter Nginx besteht unter Umständen die Möglichkeit, die Software auch die Integration der TLS/SSL-Zertifikate übernehmen zu lassen. In diesem Artikel gehe ich stattdessen auf den etwas komplizierteren Weg ein. Damit könnt ihr selber die Konfiguration vornehmen und überprüfen.

Wichtig: Die folgenden Befehle müssen als root-Benutzer ausgeführt werden. Sofern du einen anderen Benutzer nutzt, kann gegebenenfalls ein vorangestelltes „sudo “ verwendet werden.

1. Debian Backports installieren

Je nach Entwicklungsstand des Projekts, wenn ihr diesen Artikel lest, kann es unter Debian notwendig sein, die jeweiligen Backports zu installieren. Dabei handelt es sich vereinfacht gesagt um Beta-Pakete.

Führt die folgenden beiden Befehle auf dem Server aus, um die Backports zu den Paketquellen hinzuzufügen:

Anschließend aktualisieren wir die Paket-Informationen:

Solltet ihr statt Debian ein anderes System verwenden, solltet ihr euch informieren, wie dort die Vorgehensweise ist.

2. Certbot installieren

Nun installieren wir Certbot. Certbot ist eine Software der EFF, die mittels Let’s Encrypt HTTPS für die eigene Website ermöglicht.

Wir führen den folgenden Befehl aus:

Sofern du die Pakete nicht aus den backports installierst, reicht der erste Teil bis einschließlich „certbot“ aus.

3. Zertifikat einrichten

Nun wollen wir das Zertifikat für eine Domain einrichten. In diesem Fall soll die Domain über www.example.com und example.com via HTTPS erreichbar sein. Die Inhalte der Domain liegen unter /var/www/example/.

Alle Angaben solltet ihr auf eure Gegebenheiten anpassen.

Wir führen den folgenden Befehl aus:

Nun wird Certbot euer Zertifikat generieren und  über die Let’s Encrypt API verifizieren. Am Ende der Ausgabe bekommt ihr einen Datei-Pfad angezeigt, z.B. /etc/letsencrypt/live/example.com/… In diesem Ordner liegen die Zertifikatsdateien.

Für optimale Sicherheit eurer TLS/SSL-Verbindung generieren wir noch einen Diffie-Hellmann-Schlüssel und legen diesen in dem gleichen Ordner ab. Das Ausführen des folgenden Befehls kann einige Minuten dauern (Anpassen der Domain/des Pfads nicht vergessen):

Um per E-Mail über kritische Meldungen benachrichtigt zu werden, könnt ihr euch über den certbot registrieren.

4. Nginx Konfiguration

Ruft nun die jeweilige Nginx-Konfigurationsdatei mit dem vHost für eure Domain auf.

Falls ihr nicht wisst, wo sich diese befindet, öffnet zunächst das entsprechende Nginx Verzeichnis und lasst euch die enthaltenen Dateien anzeigen:

Die korrekte Datei könnt ihr nun mit dem Editor vi öffnen (und dann per [Einfg]-Taste editieren), z.B.:

Mehr Informationen über die vHosts und Server-Einträge erhaltet ihr hier.

Euer neue vHost – also die gesamte Datei – könnte beispielsweise auf dieses Beispiel angepasst werden:

Die wichtigsten Anpassungen habe ich mit Kommentaren gekennzeichnet. Insbesondere solltest du nicht vergessen, die ursprüngliche Einstellungen (insbesondere alle location-Abschnitte) in den unteren Teil zu übernehmen.

Mit [Esc] und „:wq“ speicherst du die Datei.

Per

wird die Konfiguration geprüft. Wenn alles in Ordnung ist, kannst du die Nginx-Konfiguration neu einlesen lassen:

Damit ist die Nginx Konfiguration abgeschlossen. Dank Let’s Encrypt lässt sich deine Website jetzt auch über HTTPS abrufen.

Die Konfiguration, die ich dir vorgestellt habe, gilt derzeit als besonders sicher. Es werden nur die sichersten Verschlüsselungsverfahren akzeptiert und Perfect Forward Secrecy (PFS) ist aktiv. Alle modernen Browser (Firefox und Chrome seit vielen Jahren, der Internet Explorer seit Version 8) unterstützten PFS ebenfalls. Über ältere Browser ist deine Website bei dieser Konfiguration nicht mehr abrufbar.

5. Automatische Verlängerung der Zertifikate

Da die Zertifikate bereits nach 90 Tagen auslaufen, solltest du sie automatisiert verlängern lassen. Dafür richten wir einen Eintrag in der Crontab ein, der Certbot ausführt und anschließend Nginx die Konfiguration neu einlesen lässt.

Mit einem kleinen Trick können wir das alles über die Kommandozeile machen und müssen nicht in einen Editor wechseln. Führt einfach die folgenden Befehle nacheinander aus:

Täglich um 2:42 Uhr wird Certbot die Zertifikate bei Bedarf über die Let’s Encrypt API verlängern.

6. Zertifikatsdateien sichern

Du solltest ab sofort daran denken, auch für den Ordner /etc/letsencrypt regelmäßig Backups anzulegen, um die Zertifikatsdateien zu sichern.

Fazit zu Let’s Encrypt

Let’s Encrypt ist tatsächlich eine kleine Revolution. Viele Webhoster unterstützen Let’s Encrypt bereits und ermöglichen damit ganz einfach ein kostenloses TLS/SSL-Zertifikat.

Webmaster, die ihr Nginx selbst verwalten, können außerdem – wie gezeigt – mit ein paar kleinen Handgriffen Let’s Encrypt und Certbot verwenden und die eigene Website bereit für HTTPS machen.

Viel Erfolg mit der verschlüsselten Version eurer Website!

 

 

Let’s Encrypt: Verschlüsselung mit SSL/TLS unter Nginx
Bewerte den Artikel


Werbung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Solve : *
9 − 6 =