Kostenlose SSL Verschlüsselung durch Let’s Encrypt, so gehts

Let's Encrypt

Am 3. Dezember 2015 startete Let’s Encrypt – Free SSL/TLS Certificates seine öffentliche Beta Phase… Also habe ich gleich losgelegt und u. a. auch ansas-meyer.de auf HTTPS umgestellt.

Da es dabei doch einige Stolpersteine gab, stelle ich hiermit gerne eine Anleitung inkl. aller nötigen Konfigurationen zur Verfügung, mit deren Hilfe Ihr Eure Zertifikate einmal manuell einrichten und dann automatisch aktualisieren (renew) lassen könnt.

Inhalt

Großer Vorteil: Wenn man die Zertifikate einmal nach diesem Schema eingerichtet hat, brauch man sich um nichts mehr kümmern: Das lästige manuelle Erneuern von Zertifikaten (in der Regel alle 1-2 Jahre) entfällt. Zwar sind die Let’s Encrypt Zertifikate (aktuell) jeweils nur 3 Monate lang gültig, aber diese werden automatisch frühzeitig erneuert.

Mein Fazit vorweg: Ich fahre mit Let’s Encrpty nun seit Dezember 2015 sehr gut und diverse Zertifikate wurden bereits vollautomatisch rechtzeitig erneuert. Top!


 

Voraussetzungen

Ihr benötigt:

  • Linux Debian 8.x (Jessie) oder höher (prüfbar mittels cat /etc/debian_version)
  • Root Zugriff auf den Server / Rechner (prüfbar mittels su)
  • Apache 2.4 oder höher (prüfbar mittels apache2 -v)
  • Git (prüfbar / installierbar mittels apt-get install git)

Hinweis: Inzwischen funktioniert das Let’s Encrypt Tool zwar auch zuverlässig mit Debian 7.x (Wheezy) und Apache 2.2, jedoch beruhen meine Konfigurationen (insb. Apache Einstellungen) auf der neueren Version.


 

Installation

Sofern alle Voraussetzungen erfüllt sind müss Ihr zunächst einmal root werden und dann das Let’s Encrypt Tool via Git klonen.

## become root
su

## change to install dir
cd /opt/

## get let's encrypt tool
git clone https://github.com/letsencrypt/letsencrypt

Das sollte es schon gewesen sein. Das Tool befindet sich nun im Ordner /opt/letsencrypt/ und aktualisiert sich bei jedem Aufruf automatisch (es ist also kein ständiges git pull nötig).

Nun solltet Ihr zunöchst einmal prüfen, ob das Tool auch wirklich funktioniert. Nicht erschrecken: Beim ersten Aufruf installiert das Tool ggf. noch einige Pakete wie python-virtualenv (Python virtual environment creator) nach. Ab dem zweiten Aufruf sieht dann aber alles „normal“ und übersichtlich aus. Hierzu genügt es schon die Hilfe Funktion einmal aufzurufen:

/opt/letsencrypt/letsencrypt-auto --help

 

Konfiguration von LetsEncrypt

Damit Ihr nicht bei jedem Aufruf des Tools die diversen Konfigurationsvariablen mitgeben müsst, legt Ihr nun die Datei /etc/letsencrypt/cli.ini an:

## create config dir
mkdir -p /etc/letsencrypt

## create config file for cli
vi /etc/letsencrypt/cli.ini

In diese nun geöffnete Datei tragt Ihr nun diese Daten ein:

rsa-key-size = 4096

email = me@domain.tld

authenticator = webroot
webroot-path = /var/www/letsencrypt

agree-tos = true
text = true

Die Email-Adresse in Zeile 3 natürlich anpassen. Dann Datei speichern und schließen.


 

Apache vorbereiten

Auch hier wollen wir ein wenig was vorbereiten, damit das Tool Eure Domains später immer verifizieren kann, auch wenn eine Domain oder Subdomain zum Beispiel komplett via Passwortschutz gesichert ist oder aber auch gar nicht im Apache eingerichtet ist. Dazu wird zunächst ein eigenes spezielles Webverzeichnis eingerichtet und bei Apache Konfiguration dann alle Anfragen vom Let’s Encrypt Tool dahin weitergeleitet:

## create webroot dir
mkdir -p /var/www/letsencrypt

## create config file for cli
vi /etc/apache2/conf-available/letsencrypt.conf

In diese nun geöffnete Datei tragt Ihr nun diese Daten ein:

# Letsencrypt special config

Alias /.well-known /var/www/letsencrypt/.well-known

<Directory /var/www/letsencrypt/.well-known>
    AllowOverride None
    DirectorySlash Off
    Options FollowSymLinks

    # Make sure site is accessible
    Require all granted

    <IfModule rewrite_module>
        # Simulate 404 "not found" for non existant directories
        RewriteEngine On
        RewriteOptions AllowNoSlash
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ - [L,R=404]
    </IfModule>
</Directory>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Dann Datei speichern und schließen.

Damit der Webserver (Apache 2.4) die Konfiguration auch annimmt müssen wir diese zunächst aktivieren und dann die Einstellungen des Webservers einmal neu laden:

## activate letsencrypt config
a2enconf letsencrypt

## reload apache2 config
service apache2 graceful

 

Zertifikate manuell beantragen

Nun sind wir soweit, dass wir ab sofort mit ganz wenig Aufwand neue Zerfifikate erstellen können. Dabei spielt es mit dieser Konfiguration von Let’s Encrypt und Apache2 keine Rolle mehr, ob die Domain via Apache überhaupt eingerichtet ist oder ob die Seite komplett via Apache Authentifizierung gesichert ist. Es muss lediglich sichergestellt sein, dass der eben umkonfigurierte Webserver generell für die Domain zuständig ist (anders gesagt: Der Webserver muss auf der IP lauschen, die für die Domain hinterlegt ist).

Da in der Regel ein Zertifikat für eine Domain mit und ohne www. Präfix erstellt werden soll, hier ein einfaches Beispiel anhand der Domain domain.tld:

export LETSENCRYPT_DOMAIN=admin.dhm80.de
/opt/letsencrypt/letsencrypt-auto certonly -c /etc/letsencrypt/cli.ini -d $LETSENCRYPT_DOMAIN -d www.$LETSENCRYPT_DOMAIN

Es wurde nun ein neues Zertifikat für die Domains domain.tld und www.domain.tld erstellt. Ihr könnt den Befehl beliebig abändern: Für jede Domain, die Ihr in einem Zertifikat haben wollt, muss einfach jeweils ein -d my.domain.tld gesetzt werden.

Natürlich könnt Ihr beliebig viele Zertifikate erstellen. Einfach das Tool mehrfach mit den jeweils gewünschten Domains aufrufen.

Weitere Infos findet Ihr auf der Doku Seite von Let’s Encrypt.


 

SSL im VHOST hinterlegen

Fast geschafft. Die Zertifikate liegen nun schon auf dem Server. Ihr müsst Apache nur noch mitteilen, wo die neuen Zertifikate liegen. Dazu geht Ihr zunächst in den Ordner, wo alle VHOST bezogenen Dateien liegen und öffnet die Datei, die für die Domain zuständig ist, für die Ihr das neue Let’s Encrypt Zertifikat hinterlegen wollt:

## change into vhost config dir
cd /etc/apache2/sites-enabled

## open vhost file (example)
vi 100-domain.tld.conf

Der entsprechenden Teil der Konfiguration sollte dann so aussehen:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem

Natürlich auch hier in Zeile 2-3 wieder den Teil domain.tld durch den echten Namen Eures Zertifikats ersetzen. Dann Datei speichern und schließen.

Natürlich gehört zur korrekten und sicheren Einstellung von SSL im Apache noch ein wenig mehr als diese 3 Zeilen, jedoch würde das Thema hier den Rahmen sprängen.

Wichtig: Nach jeder Änderung der Konfiguration muss diese dem Webserver mitgeteilt werden:

## reload apache2 config
service apache2 graceful

 

Zertifikate automatisch erneuern lassen

Das geht inzwischen ganz ohne irgendwelche selbst geschriebenen Skripte. Einfach einen Cronjob erstellen und fertig:

55 10 * * 00 root /opt/letsencrypt/letsencrypt-auto renew && /etc/init.d/apache2 restart

Natürlich kann der Job auch jederzeit manuell ausgeführt werden. Wichtig nur: Der Job muss so oder so als root ausgeführt werden.

Wichtiger Hinweis: Der Job wird in diesem Beispiel jeden Sonntag um 10.55 Uhr ausgeführt. Einmal die Woche reicht völlig aus, da das Tool ein „renew“ ca. 1 Monat vor Ablauf schon vornimmt. Bitte setzt bei Tag (hier 00, erlaubt „00-06“), Minuten (hier 55, erlaubt „00-59“) und Stunden (hier 10, erlaubt „00-23“) jedoch jeweils einen anderen beliebigen Wert ein. Damit werden die Anfragen an Let’s Encrypt ein wenig besser über den Tag bzw. die Wochentage verteilt.


 

Noch eine Info zum Schluss: Let’s Encrypt hat am 12.04.2016 offiziell die Beta Phase verlassen. Respekt!

… danke fürs Lesen!
… ich hoffe ich konnte helfen!
… hinterlasst Euer Feedback!

Das könnte dich auch interessieren …

Eine Antwort

  1. Michael sagt:

    Top Anleitung, danke!

Schreibe einen Kommentar

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

Bitte beachte die Hinweise zum Datenschutz