Seit heute Abend 19 Uhr erlaubt das von zahlreichen Organisationen und Unternehmen wie der Electronic Frontier Foundation oder Mozilla unterstützte Let’s-Encrpyt-Projekt das Ausstellen von kostenlosen SSL-Zertifikaten, ohne dass man sich vorher zu einem Beta-Test oder anderen Hürden anmelden müsste. Somit lassen sich Zertifikate für verschlüsselte HTTPS-Verbindungen für beliebige Domains ausstellen – ohne dass der Browser das Zertifikat beanstandet. Let’s Encrpyt bietet dabei ein Tool an, mit dem man sich die Zertifikate direkt über das Terminal auf den Webserver schaufeln kann, wenn man denn SSH-Zugriff auf das darunterliegende Linux-System besitzt. Allerdings lassen sich die Zertifikate auch manuell erstellen, sodass man sie zum Beispiel auch auf einem NAS-System nutzen kann. Ich spiele die Installation von Let’s Encrypt im Folgenden mit einem Arch Linux und einem NAS von Synology durch.
UPDATE 22.01.2016: Dieser Artikel ist inzwischen veraltet, da Synology DSM 6.0 das Einbinden und Aktualisieren von Lets’s Encrypt-Zertifikaten out-of-the-box unterstützt. Wer eine halbwegs aktuelle Diskstation besitzt, sollte daher besser das System auf einen aktuellen Stand bringen, sodass DSM 6.0 läuft und sich dann an diese Anleitung halten: Mit DSM 6.0 Let’s Encrypt-Zertifikate auf Synology-NAS einrichten.
Zum Erzeugen des Let’s-Encrpyt-Zertifikat holt ich euch den vom Projekt bereitgestellten Client auf den Rechner. Unter Arch Linux bekommt ihr das Programm schon aus den offiziellen Paketquellen, für Ubuntu hat zum Beispiel Thomas Leister bereits eine kleine Installationsanleitung geschrieben. Der Client fungiert als Schnittstelle zwischen eurem System und den Servern des Projekts. Er kann auch Zertifikate direkt im System installieren und in Apache einbinden. Für das Erstellen eines Zertifikats, das später einmal auf einem NAS landen soll, braucht man diese Funktionen allerdings gar nicht.
$ pacman -Ss letsencrypt
community/letsencrypt 0.1.0-1 [Installiert: 0.0.0.dev20151201-1]
A tool to automatically receive and install X.509 certificates to enable TLS
on servers. The client will interoperate with the Let’s Encrypt CA which
will be issuing browser-trusted certificates for free.
community/letsencrypt-apache 0.1.0-1
Apache plugin for Let’s Encrypt client
community/letsencrypt-nginx 0.1.0-1
Nginx plugin for Let’s Encrypt client
community/letshelp-letsencrypt 0.1.0-1
Let's help Let's Encrypt client
$ sudo pacman -S letsencrypt
Anschließend ruft ihr den Let’s-Encrpyt-Client mit Root-Rechten auf. Die Option certonly -a manual sorgt dabei dafür, dass der Client das Zertifikat nur erzeugt, aber nicht auch noch zu installieren versucht. In der Beta-Version musste man zudem noch mit etwa --server https://acme-v01.api.letsencrypt.org/directory der Server angeben, mit der heute veröffentlichten Version 0.1.0 des Clients ist diese Option nun nicht mehr nötig. Verzichtet ihr auf die Angabe einer Domain und einer E-Mail-Adresse wird euch das Programm nach diesen Angaben fragen, alternativ gibt ihr diese Infos dem Client gleich mit auf dem Weg.
### Ohne Optionen, Abfragen erfolgen in einer Ncurses-Oberfläche
$ sudo letsencrypt certonly -a manual
### Direkt mit allen Angaben
$ sudo letsencrypt certonly -a manual --email du@email.de -d domain.example.com
Voraussetzung für diese Aktion ist natürlich, dass euer NAS über HTTP und HTTPS aus dem Netz zu erreichen ist und dass ihr eine DynDNS-Adresse besitzt, unter der euer Netzwerkspeicher aus dem Internet zu erreichen ist. Eine Synology erfüllt diese Kriterien, wenn ihr unter Systemsteuerung | Externer Zugriff | DDNS ein entsprechendes Konto eines DynDNS-Anbieters einträgt (alternativ können diese Aufgabe aber auch Router wie eine Fritz!Box übernehmen und unter Systemsteuerung | Webdienste die Web Station als Dienst aktiviert und weiter unter die Option HTTPS-Verbindungen für Webdienste aktivieren setzt. Beachtet bitte auch, dass ihr mindestens die Ports 80 (für HTTP) und 443 (für HTTPS) von eurem Router auf das NAS weiterleitet müsst.

Weiter geht es mit der Zertifikat: Der Let’s-Encrpyt-Client versucht nun die angegebene Domain zu erreichen und zeigt euch bei Erfolg eine Adresse wie „http://domain.example.com/.well-known/acme-challenge/hierkommteinzufälligercode“ mitsamt einem langen kryptischen Code an. Diese URL mitsamt der damit verbundenen Datei dient zur Identifikation eures Webservers. Die Installations-Skripte des Clients könnten euch diese Aufgabe nun abnehmen, allerdings kann der Client mit eurem NAS-System nun natürlich weniger anfangen, daher müsst ihr diese Datei von Hand auf dem Webserver des NAS-Systems anlegen.

Loggt euch also beispielsweise per Samba auf eurem NAS ein, wechselt in das Verzeichnis mit den Webdaten, erzeugt die Ordnerstruktur .well-known/acme-challenge (ja, der Punkt gehört da hin) und in diesem dann die Datei hierkommteinzufälligercode mitsamt dem länglichen String, den euch der Client ausgibt. Das ganze funktioniert natürlich in der Regel auch über die Weboberfläche des NAS-Systems. Zur Kontrolle könnt ihr danach einfach mal auf den Link klicken und ihn in einem Browser auf eurem Rechner öffnen. Dazu muss natürlich die Namensauflösung der Internetdomain auch aus eurem lokalen Netzwerk heraus funktionieren. Zeigt dieser den Inhalt der Datei an, dann sollte alles funktionieren.

Make sure your web server displays the following content at
http://domain.example.com/.well-known/acme-challenge/hierkommteinzufälligercode before continuing:
o6klFxce...diesercodedientzumidentifiziereneuresnas
If you don't have HTTP server configured, you can run the following
command on the target server (as root):
mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
cd /tmp/letsencrypt/public_html
printf "%s" o6klFxce...diesercodedientzumidentifiziereneuresnas > .well-known/acme-challenge/o6klFxcezfKWMClYLxIw_HDJ1uPo268aZrtiaUpOtjg
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
Press ENTER to continue
Liegt die Datei auf dem Webserver und habt ihr die Erreichbarkeit über den Browser geprüft, dann geht mit der Eingabe von [Enter] einen Schritt weiter. Die Let’s-Encrypt-Server rufen die Authentifizierungsdatei von eurem Webserver ab, kontrollieren sie auf Gültigkeit und stellen dann das für die angegebene Domain für 90 Tage gültige Zertifikat aus. Dieser landet dann automatisch unter /etc/letsencrypt/live/domain.example.com auf eurer Festplatte. Die begrenzte Gültigkeit begründet Let’s Encrypt mit erhöhter Sicherheit, da so verloren gegangene oder missbrauchte Zertifikate relativ schnell ihre Gültigkeit verlieren. Das Ziel sei es sowieso das Generieren der Zertifikate zu automatisieren, dann soll die Zeitspanne sogar noch weiter sinken.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/domain.example.com/fullchain.pem. Your cert
will expire on 2016-03-02. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
Für die Installation der Zertifikate auf einem Synology-NAS müsst ihr euch nun wieder in die Weboberfläche eures Netzwerkspeichers einloggen und (im Falle eines Synology-Systems) nach Systemsteuerung | Sicherheit | Zertifikat gehen. Dort wählt ihr die Option Zertifikat importieren und gebt die privkey.pem als privaten Schlüssel und die fullchain.pem als Zertifikat an. Damit ihr an diese Dateien kommt, müsst ihr sie allerdings erst einmal aus dem Ordner mit Root-Rechten rauskopieren, da nur Root Zugriff auf diese Dateien hat und somit der Browser fehlende Rechte moniert. Ein Weg dies zu tun, wäre beispielsweise der Folgende, natürlich führen hier zahlreiche andere Wege zum selben Ziel.
$ sudo -s
# cd /etc/letsencrypt/live/domain.example.com/
# ls
cert.pem chain.pem fullchain.pem privkey.pem
# cp fullchain.pem privkey.pem /tmp
# exit
$ sudo chown $USER /tmp/*.pem
Am Ende meldet die Zertifikats-Verwaltung des Synology-NAS nun ein von der „Let’s Encrypt Authority X1“ signiertes SSL-Zertifikat. Die Gültigkeit beträgt wie gesagt 90 Tage, ihr solltet das Zertifikat vor Ablauf dieser Zeitspanne erneuern, wiederholt dazu einfache alle hier gezeigten Schritte. Aktuell führt daran kein Weg vorbei, hier müssen Synology und Co. aktiv werden und eine Funktion direkt in die Software der NAS-Geräte implementieren, über die sich Let’s-Encrypt-Zertifikate direkt aus dem System heraus erzeugen und Verwalten lassen. Die wird mit Sicherheit kommen. Ich hoffe, dass die Hersteller dabei aber auch ältere Geräte nicht außen vor lassen. Noch ein Hinweis am Rande: Meldet das System ein von „Happy Hacker Fake CA“ ausgestelltes Zertifikat, dann seid ihr noch mit einem Beta-Client unterwegs.



Am Ende muss auch noch der von euch genutzte Browser das Zertifikat akzeptieren. Das wäre zum Testzeitpunkt mit Chrome 47.0 wie auch mit Chromium 47.0 der Fall. Beide Browser signalisieren über ein grünes „https://“ in der Adresszeile, dass mit dem Zertifikat alles stimmt. Firefox 42.0 hingegen und beispielsweise der in Gnome integrierte Browser stoßen sich jedoch weiterhin am Aussteller des Zertifikats und melden „This Connection is Untrusted“. Ironischerweise muss als noch Mozilla als einer der wichtigsten Platinum-Sponsoren seine Hausaufgaben machen, was allerdings mit Sicherheit bald geschehen wird.






Schreibe einen Kommentar