let’s encrypt …

…mit Apache auf Windows Server.

Ich habe vor einigen Monaten alle meine bisher mehr oder weniger teuer erkauften Zertifikate auf die kostenlosen SSL-Zertifikate der Initiative let’s encrypt umgestellt. Hier meine Vorgehensweise und meine Erfahrungen nach dem ersten Renewal:

Installation Drittsoftware und Einrichten der Zertifikate:

  • Download der Software letsencrypt-win-simple. Zur Zeit des Schreibens des Artikels aktuelle Version ist 1.9.3. Download bei GitHub unter https://github.com/Lone-Coder/letsencrypt-win-simple/releases
  • Archiv entpacken und am Webserver in ein Verzeichnis kopieren. Bei mir landen die Dateien im Ordner c:\WebServer\SSLCert
  • Das Retrieval eines Zertifikats läuft wie folgt ab:
    • letsencrypt.exe legt im Verzeichnis der öffentlich erreichbaren URL ein verstecktes Verzeichnis mit Infos ab; bei mir gibts also immer eine http- und eine https-URL derselben Seite, wobei hinter der http-Version nur eine Weiterleitung auf die SSL-URL versteckt ist
    • letsencrypt.exe veranlasst ihren eigenen Server, diese Infos auszulesen, um so den Eigentümer zu verifizieren
    • wenn positiv, legt letsencrypt.exe die entsprechenden Zertifikate für die Domäne im AppData-Verzeichnis des Benutzers in c:\Users ab.
  • Beispiel: Die Domäne lautet bit-online.at, und liegt am Webserver im Verzeichnis unter c:\WebServer\wwwRoot\www.bit-online.at
  • Zertifikat installieren:
    • Öffnen einer Kommandozeile als Administrator, wechseln in das Verzeichnis mit letsencrypt.exe
    • Folgendes Kommando absetzen:
      letsencrypt.exe –webroot „c:\WebServer\wwwRoot\www.bit-online.at“ –manualhost „bit-online.at“
      Die Frage nach dem Erstellen bzw. Erneuern des Tasks verneinen, der wird hinterher manuell angelegt.

      Das wars mit der Installation des Zertifikats.

  • Als nächstes die ssl-Konfigurationsdatei des Apache öffnen: conf/extra/httpd-ssl.conf und hier die Zertifikate mit folgenden drei Zeilen installieren:
    Pfade und Dateinamen natürlich entsprechend anpassen.
  • Außerdem den virtual Host für die SSL-Seite(n) hier konfigurieren, in meinem Beispiel wie folgt
  • Webserver mit httpd -k restart neu starten, und die Seite ist unter SSL erreichbar.

Automatische Erneuerung des Zertifikats

Eigentlich legt letsencrypt.exe einen geplanten Task an, der täglich mit dem Befehl „letsencrypt.exe –renew […]“ automatisch alle am Server installierten let’s encrypt Zertifikate auf Erneuerung checkt und dieses Renewal im Bedarfsfall auch durchführt.

Meine Installationen sind drei Monate her, gestern war das Renewal fällig, und ich habe im Vorfeld schon Warn-EMails bekommen, dass was nicht funktioniert hat. Nur – beim Check mit –renew war alles OK und auch das Datum entsprechend verlängert. Gestern waren dann trotzdem alle Zertifikate ungültig. Man hats am expire date eh kommen sehen.

Workaround laut Foren: Geplanten Task selbst anlegen mit dem Befehl letsencrypt.exe –accepttos –webroot „c:\WebServer\wwwRoot\www.bit-online.at“ –manualhost „bit-online.at“. Ich habe den Task so installiert, dass er einmal wöchentlich läuft – im Falle eines Zertifkatupdate muss nämlich auch der Webserver neu gestartet werden, und der fällt dann nur einmal wöchentlich für ein paar Sekunden aus.

Bei mir bleibt der Task dann auch noch „hängen“, weil das Skript ja nach der Erneuerung des geplanten Tasks fragt. Kill nach 1 h, nicht nach drei Tagen. Funktioniert, aber recht elegant finde ich die Lösung selbst nicht.