Kostenlose SSL Verschlüsselung durch Let’s Encrypt, so gehts
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!
Top Anleitung, danke!