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.

Auf dem NAS-System muss der Webserver mitsamt HTTPS-Erweiterung aktiv sein.
Auf dem NAS-System muss der Webserver mitsamt HTTPS-Erweiterung aktiv sein.

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.

Der Let's-Encrypt-Client muss selbstverständlich die Domain kennen, für die er ein SSL-Zertifikat erzeugen soll.
Der Let’s-Encrypt-Client muss selbstverständlich die Domain kennen, für die er ein SSL-Zertifikat erzeugen soll.

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.

Die von Let's Encrypt angeforderte Authentifizierungs-Datei kann man auch direkt per Editor auf das NAS schaffen.
Die von Let’s Encrypt angeforderte Authentifizierungs-Datei kann man auch direkt per Editor auf das NAS schaffen.
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.

Die per Let's-Encrypt-Client erzeugte kopiert ihr über das Webfrontend auf das Synology-NAS.
Die per Let’s-Encrypt-Client erzeugte kopiert ihr über das Webfrontend auf das Synology-NAS.
Nach der Installation der Zertifikate sollte das NAS nun ordentlich über HTTPS erreichbar sein.
Nach der Installation der Zertifikate sollte das NAS nun ordentlich über HTTPS erreichbar sein.
Happy-Hacker-Zertifikate meldet das System nur noch, wenn ihr mit einem veralteten Let's-Encrypt-Client arbeitet.
Happy-Hacker-Zertifikate meldet das System nur noch, wenn ihr mit einem veralteten Let’s-Encrypt-Client arbeitet.

//PS: 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.

30 Kommentare

  1. Durch diese Anleitung dürften ja auch Mieter nur eines Webspace (also ohne Shell- oder gar Rootzugriff) in den Genuss dieser CA kommen, wenn ich das richtig verstehe.

    • Hallo Benedigt, das kommt drauf an: Dein Webhoster müsste dir schon noch einen HTTPS-Serverpart zuschalten und auch das Zertifikat einspielen — und das alle 90 Tage. Für Shared-Webspace eignet sich Let’s Encrypt daher –vorerst — eher nicht. Grüße, Christoph.

      • Danke für die Klarstellung.

        Das mit der Automatisierung (so ist es ja wohl gedacht) geht ja eh einfacher auf einem Server mit Shell- oder Rootzugriff zu realisieren.

      • Das ein oder andere Control Panel, das gerne von Shared Hostings eingesetzt wird, evaluiert schon geraume Zeit LetsEncrypt und will das auch direkt implementieren. Da gibt es gerade bei OpenSource Panels doch glücklicherweise einige Möglichkeiten 🙂

      • Ich nutze mit Let’s Encrypt generierte Zertifikate bereits seit einiger Zeit auf all-inkl. Geht dort ab dem Tarif PrivatPlus.

        Erstellt werden die Zertifikate lokal (die notwendigen Validierungsdateien werden mittels FTPS auf den Server kopiert). Upload und Aktivierung erfolgt mittels Skript, das deren KAS-Schnittstelle nutzt. Funktioniert wunderbar und voll automatisiert per Cron-Job. Ist also gar nicht mal zwingend notwendig, dass die Let’s Encrypt irgendwann direkt unterstützen, was aber vermutlich kommen wird und natürlich um einiges Benutzerfreundlicher wäre.

  2. Hey, danke für den Guide! Ich hab den mal zweckentfremdet für einen Apache 2.2 (letsencrypt kommt apache 2.2 nicht zurecht, mit 2.4 schon) 😛 Ich frage mich aber ob ich den Ordner für diese „ACME Challenge“ nachdem ich das zertifikat bekommen habe löschen sollte?

  3. Hallo Christoph,

    vielen Dank für die ausführliche Anleitung. Für mich stellt sich allerdings die Frage, ich habe vor der Syno noch eine Fritzbox.

    Sollte ich auf der Fritzbox das Zertifikat auch einbinden? Die rufe ich zurzeit noch mit dem selbst generierten Zertifikat auf.

    Hast du nicht Lust, hierfür auch noch eine kurze Anleitung zu schreiben? 🙂

    Bei mir ist die Fritbox über https://sub.domain.tld erreichbar, die Syno zurzeit unter https://sub.domain.tld:5001 – irgendwie kapiere ich noch nicht ganz, ob nun beide Geräte das Let’s Encrypt Zertifikat benötigen, oder nur die Fritz?

    VIELEN DANK schon mal für deine Hilfe!

  4. @Phillip: Du kannst den Ordner löschen, LetsEncrypt benötigt ihn nur kurz, um zu prüfen, ob die Datei mit dem zufälligen Code darin vorhanden ist. Danach braucht man den Ordner nicht mehr.

    @Sven: Bist du dir sicher, dass hinter https://sub.domain.tld/ ein Webserver läuft (auf Port 443)?

    Bei der FritzBox kann man nach meiner Meinung kein Zertifikat einbinden, hier existiert auch kein Webserver, wo man die benötigten Dateien ablegen kann.
    Daher sollte ein Webserver auf der NAS mit Portweiterleitung der FritzBox auf 443 reichen, um den Ordner .well-known/achme-challenge abzurufen.

    Gruß
    Chris

    • Ja, das ist das Web-Frontend von der Fritzbox. Nennt sich im Menü „Internet / Freigaben / Fritz!Box-Dienste“.

      TCP-Port für HTTPS ist 443 zusätzlich kann man den Haken für „Internetzugriff auf die FRITZ!Box über HTTPS aktiviert“ setzen.

      Weiter unten ist dann auch der Punkt „Zertifikat“ zu finden. Hier gibt es die Möglichkeit ein „Benutzereigenes Zertifikat“ hochzuladen.

  5. Kurze Anmerkung. In live liegen nur Softlinks auf archive. Das kann, wenn man wie ich mit Windows als Zwischenstation kopiert, zu kaputten pem-Files führen.

  6. Hallo,

    unter Gentoo und Firefox 42 wird das Zertifikat nicht akzeptiert. Konqueror ebenfalls nicht. Nur unter Googles Chrome wird das Zertifikat akzeptiert.
    Kann jemand etwas zur Windows-Version von Firefox sagen?

    Liebe Grüße

  7. Hey,
    Danke für die ausführliche gute Anleitung. Ja jetzt Interesse ich mich auch für die Einbindung in der Fritz Box wie Sven.
    Die 6360/6460 bietet auch die Möglichkeit eines eigenen Zertifikat
    Zu finden unter Internet -> Freigabe -> Fritz Box Dienste

    Gruß und danke

    Marco

  8. Möchte hier jetzt nicht spammen, doch der selbe Ansatz sollte auch mit einer Fritzbox funktionieren. Falls man kein NAS hat mal nen eigenen Webserver auf dem PC oder dem PI aufsetzen. (Würde ich versuchen, falls es klappt)
    Jedoch muss man auch schauen, wie oft die Zertifikate erneuert werden müssen. Nicht dass man sich selbst aussperrt. 90 Day lifetime.

  9. Hallo Christoph,

    ich habe das Zertifikat seit der Pre-Beta ebenfalls erfolgreich auf der Synology im Einsatz und bin dabei ähnlich vorgegangen wie Du.

    Anfangs hatte ich die fullchain.pem auf der Synology installiert und da stieß ich auch auf das Problem, dass einige Browser (wie z.B. Firefox) das Zertifikat nicht aktzeptierten.

    Nachdem ich dann die fullchain.pem gegen die cert.pem ausgetausch hatte, läuft es mit allen Browsern.

    Nur mal so als Hint…

    Schöne Grüße,
    Jan

  10. Wer für Fritzbox seinen Zertifikat benutzen will muss einfach nach dem schritt Congratulations
    einfach diesen Befehlt durchführen:

    cat privkey.pem cert.pem > fritzbox.pem
    chmod 777 fritzbox.pem

    und dann in Intenet -> Freigaben -> Fritz!Box-Dienste importieren (ACHTUNG kein passwort benötigt für Zertifikat)

    Have Fun!

  11. kleine anmerkung zu MZman,

    man sollte lieber cat privkey.pem fullchain.pem > fritzbox.pem nutzen, sonnst gibs zbs unter android ein err_cert_authority_invalid

    • $ openssl pkcs12 -export -out cert.pfx -inkex private.key -in certificate.crt -certfile ca_bundle.crt 
      $ openssl pkcs12 -in cert.pfx -out cert4fb.pem -nodes
      

      hat bei mir geklappt

      gruss

      lifesim.de

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein