Kostenlose SSL Zertifikate mit letsencrypt
Die letzten Tage habe ich mir letsencrypt angeschaut und bin wirklich positiv überrascht. Zum einen ist es gut dokumentiert und einfach zu benutzen, vor allem funktioniert es auch. Wie einfach es ist möchte ich hier zeigen.
Installation
Das letsencrypt Script wird beim ersten Aufruf alle Abhängigkeiten für das OS nachinstallieren und nachladen.
cd /root git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt ./letsencrypt-auto |
Konfiguration
Die Konfigurationsdatei befindet sich unter /etc/letsencrypt/cli.ini Hier können Dinge konfiguriert werden, die für alle Zertifikate gültig sein sollen.
Mir war es z.B. lieber 4096-bit RSA Keys (Default: 2048) zu erzeugen und die E-Mail Adresse ändert sich auch nicht.
rsa-key-size = 4096 email = webmaster@example.com |
Zertifikat erstellen
Um ein Zertifikat zu erstellen benötigt man einen Webserver auf Port 80 mit einem bereits konfigurierten VirtualHost. Danach reicht ein einzelner Befehl um das SSL Zertifikat zu erstellen. Mit certonly signalisiert man, dass man Apache lieber selbst konfigurieren möchte.
./letsencrypt-auto certonly --webroot -w /var/www/example.com -d example.com -d www.example.com |
Die Zertifikate (und alle weiteren Dateien) liegen anschließend unter /etc/letsencrypt/live
SSL Weiterleitung mit letsencrypt
Ich persönlich habe eine Weiterleitung von HTTP auf HTTPS konfiguriert. Dennoch muss der letsencrypt Server in der Lage sein Daten per HTTP aus dem VirtualHost abrufen zu können. Das dient zur Domain Verifikation. Die Lösung war einen Port 80 VirtualHost zu erstellen und mit mod_rewrite zu arbeiten:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com ServerAdmin webmaster@example.com CustomLog /var/log/apache2/access.log combined ErrorLog /var/log/apache2/error.log <Directory "/var/www/example.com"> RewriteEngine on RewriteBase / RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/.well-known/.*$ RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] </Directory> </VirtualHost> |
Der .well-known Pfad wird von letsencrypt verwendet und wird nicht weitergeleitet. Ansonsten wird alles auf HTTPS umgeleitet. Der VirtualHost hat also nur die Funktion letsencrypt zu bedienen und die Umleitung vorzunehmen.
Renewal
Die letsencrypt Zertifikate sind nur 90 Tage lang gültig. Daher sollte man einen cronjob einrichten der die Aktualisierung automatisiert. Auch das wurde von den Entwicklern sehr einfach gelöst. Bei mir läuft der Cronjob jeden Sonntag morgen. letsencrypt erneuert alle Zertifikate die noch weniger als 30 Tage gültig sind, von daher reicht das locker aus.
0 7 * * 0 /root/scripte/letsencrypt_renew.sh |
Das Script prüft auch gleichzeitig ob Zertifikate erneuert wurden und startet anschließend die Dienste automatisch neu.
#!/bin/bash LOGFILE=$(mktemp) cd /root/letsencrypt ./letsencrypt-auto renew &> $LOGFILE if [ $? -ne 0 ]; then echo -e "ERROR: Something went wrong with letsencrypt.\n\n" cat $LOGFILE else if [[ -n $(find -L /etc/letsencrypt/live/ -type f -mtime -1 2>/dev/null) ]]; then echo -e "INFO: letsencrypt renewed some certificates.\n\n" cat $LOGFILE service apache2 graceful fi if [[ -n $(find -L /etc/letsencrypt/live/mailserver.example.com/ -type f -mtime -1 2>/dev/null) ]]; then service postfix reload service dovecot reload fi fi rm $LOGFILE |
Webseiten
letsencrypt Website: Link
letsencrypt Dokumentation: Link
Ich bin auf jedenfall ein großer Fan von diesem kostenlosen Service und HTTPS nutze ich ohnehin schon lange.
Sie wissen nicht, was Flattr ist? Hier erfahren Sie mehr: