Let’s Encrypt Zertifikat erstellen mit Certbot auf Windows

1. Über Let’s Encrypt

Was ist Let’s Encrypt überhaupt? – Laut der eigenen Internetseite unter https://letsencrypt.org/de/ ist Lets’s Encrypt „eine freie, automatisierte und offene Zertifizierungsstelle“.

Einfach gesprochen bietet und Let’s Encrypt die Möglichkeit und kostenlos SSL-Zertifikate ausstellen zu lassen. Allerdings liegt es nicht nur daran, dass sich Let’s Encrypt recht großer Beliebtheit erfreut. Zertifikate Ausstellen kann prinzipiell nämlich Jeder, nur wird nicht jedem Zertifikat auch von z.Bsp. Internetbrowsern vertraut. Ein gutes Beispiel hierfür sind die selbstsignierten Zertifikate, welche sich mit Microsoft Exchange Servern erstellen und verwenden lassen. Let’s Encrypt hilft uns also dabei an ein kostenloses SSL-Zertifikat zu kommen, welchem von ziemlich vielen Systemen vertraut wird und das alles mit nur recht geringem Aufwand.

Hinweis: Ich meine in Verbindung mit iOS von leichten Vertrauens-Problemen bzgl. Zertifikaten von Let’s Encrypt gehört zu haben. Apple bringt für die verschiedenen Versionen von iOS Listen heraus, auf welchen alle CAs stehen, die iOS als „vertrauernswürdige Speicher“ ansieht. Die Listen sind hier zu finden: https://support.apple.com/de-de/HT204132 Let’s Encrypt ist dort bisher (Stand 12/2020) nicht gelistet.

2. Anleitung

Es gibt viele verschiedene Möglichkeiten Let’s Encrypt Zertifikate zu beziehen und eine davon ist Certbot. Jetzt könnten bei einigen Leuten schon die Alarmglocken läuten mit der Frage, ob dafür nicht ein Linux Betriebssystem notwendig ist. Das ist natürlich absolut richtig und hier kommt das Windows Terminal und das Windows Subsystem for Linux (kurz WSL) zum Einsatz.

2.1 Einrichtung Windows Terminal und WSL

  1. Zuerst laden wir uns das Windows Terminal von Microsoft herunter (https://www.microsoft.com/de-de/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab)
  2. Danach aktivieren wir das Feature WSL1. Hierzu starten wir zunächst das soeben installierte Terminal als Administrator und geben folgenden Befehl ein: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    • Anmerkung: eine gewöhnliche PowerShell mit erhöhten Rechten hätte natürlich den gleichen Effekt gehabt. Das Windows Terminal ist allerdings meiner Meinung nach ein sehr nützliches Tool, weil es einem Möglichkeiten wie z.Bsp. mehrere Tabs bietet und auch nicht nur die PowerShell sondern z.Bsp. die CMD oder Azure Cloud Shell unterstützt.
Installation Windows Subsystem for Linux
so sieht es aus, wenn das Feature erfolgreich hinzugefügt wurde
  1. Nachdem die WSL1 installiert ist, kann jetzt noch das Update für WSL2 installiert werden, das sparen wir uns in diesem Fall aber, da es in unserem Falle nicht notwendig ist. Der nächste Schritt wäre dann sich noch für eine Linux Distro zu entscheiden, die man gern verwenden möchte. Ich verwende hier Debian, es gibt aber auch Ubuntu 20.04 LTS und viele mehr im MS-Store.
  2. Nun muss ein Neustart durchgeführt werden, damit das WSL verfügbar ist.
  3. Als nächstes rufen wir erneut die Seite der Linux Distro im Windows Store auf und klicken dort auf die Schaltfläche „Starten“.
Shopseite Debian for WSL
Mit einem Klick auf Starten wird die Installation der Linux WSL Distro gestartet
  1. Es öffnet sich ein neues Fenster, in welchem nun die Installation der Linux Distro durchgeführt wird. Hierbei wird allerdings lediglich ein Benutzername und ein Passwort abgefragt.
    • Hinweis: Der Benutzername und das Passwort müssen nicht der Windows Anmeldung entsprechen und haben damit nichts zutun. Es geht hierbei nur um die Anmeldung in der Linux Distribution.
  2. Nach der Einrichtung kann das Debian-Fenster geschlossen werden. Damit ist die Einrichtung von WSL und dem Windows Terminal erledigt.

2.2 Installation von Certbot und beziehen eines Let’s Encrypt Zertifikats (DNS Challenge)

Jetzt geht es ans Eingemachte. Bis hier war viel Vorbereitung und jetzt machen wir uns direkt dran unser Let’s Encrypt Zertifikat zu beziehen.

  1. Zunächst starten wir wieder unser Windows Terminal und jetzt wird auffallen, dass wir oben einen neuen Tab mit der Bezeichnung „Debian“ erstellen können, indem wir nebem dem „+“ auf den Pfeil klicken.
Öffnen der Debian Shell
über das Terminal kann nun ein neuer Debian Tab geöffnet werden
  1. Nun befinden wir uns in der Debian Shell und können Linux Befehle ausführen, ganz so, als wären wir auf einem normalen Linux Betriebssystem. Es folgt nun eine Reihe an Befehlen, die wir ausführen müssen. Als ersten Schritt, aktualisieren wir die Paketlisten mittels sudo apt update
  2. Danach installieren wir Certbot – sudo apt install -y certbot

Um Zertifikate zur erhalten muss man der Let’s Encrypt CA irgendwie bestätigen, dass man der Eigentümer der Domain ist, für welche man ein Zertifikat ausstellen lassen möchte. Hierfür bieten sich mehrere Möglichkeiten an. Wir benutzen in diesem Beipiel die DNS-Challenge. Bei dieser Challenge wir man aufgefordert, TXT Einträge mit einem bestimmten Inhalt für zu zertifizierenden Domains anzulegen. Dies lässt sich, auch in Hinsicht auf das Erstellen von Zertifikaten für dritte Personen, meiner Meinung nach am leichtesten umsetzen.

  1. In diesem Beispiel erstellen wir ein Wildcard-Zertifikat für eine Domain. Der Befehl um den Vorgang zu starten lautet – sudo certbot -d <DOMAIN> --manual --preferred-challenges dns certonly – wobei <DOMAIN> durch die zu zertifizierende Domain zu ersetzen ist. (z.Bsp. techys-web.de)
  2. Jetzt fragt certbot eine Mail-Adresse für die Renewal-Benachrichtigungen ab. Hier muss jeder selbst entscheiden, welche Mail-Adresse man dort angibt.
  3. Im nächsten Schritt sollen die Terms of Service bestätigt werden, was mit der Eingabe des Buchstaben „A“ und der Enter-Taste geschieht.
  4. Die nächste Abfrage muss nicht bestätigt werden, wenn man das nicht möchte. Es geht darum die übermittelte Mail-Adresse mit der Electronic Frontiert Foundation zu teilen, damit diese praktisch einen Newsletter zukommen lassen kann. Ich verneine diese Abfrage mittels Eingabe des Buchstaben „N“ und Enter. Das ist wirklich rein optional.
  5. Zur letzten Ja/Nein Frage bevor es wirklich losgeht gibt es nur so viel zu sagen, dass die IP-Adresse, von welchem das Zertifikat angefordert wird, öffentlich gelogged wird. Ohne eine Bestätigung mit „Y“ für Ja geht es hier nicht weiter. Es muss allerdings jeder für sich entscheiden, ob das in Ordnung ist. Sollte jemand damit nicht einverstanden sein, dann hier bitte mit „N“ antworten.
Antworten auf YN Fragen des Certbot
Übersicht über die Abfragen und meine Antworten
  1. Jetzt teilt Certbot mit, welcher DNS-Eintrag bei der Domain hinterlegt werden soll. Das muss jeder in dem Portal bei dem Anbieter erledigen, beim dem die Domain gehostet wird. In meinem Fall ist das 1und1 bzw. IONOS.
von Certbot ausgegebene Anforderung DNS TXT Eintrag
Beispiel TXT Eintrag bei IONOS
DNS Eintrag bei IONOS

Wichtig: Zuerst den Eintrag erstellen und überprüfen, ob er wirklich übernommen wurde, eh man mit Enter bestätigt. Wenn das nicht getan wird, dann schlägt der ganze Vorgang fehl und es muss von Vorne begonnen werden. Ich überprüfe sowas immer mit dem „SuperTool“ von MxToolbox – https://mxtoolbox.com/SuperTool.aspx. Dort einfach das TXT Lookup-Tool auswählen (alternativ der Abfrage „txt:“ voranstellen) und _acme-challenge.<DOMAIN> abfragen. Unter TXT sollte dann der soeben erstellte Eintrag auftauchen.

SuperTool MxToolbox Abfrage
Ausgabe der MxToolbox
  1. Ist der TXT-Eintrag deployed kann nun mit Enter beim Certbot bestätigt werden. Hat alles geklappt, erscheint nun die Erfolgsmeldung und der Pfad zu den erstellten Dateien.
Erfolgsmeldung Certbot
Certbot Erfolgsmeldung

2.3 Zertifikat „brauchbar“ machen (.pfx für Exchange)

Mit den vom Certbot erstellen Dateien können jetzt vielleicht viele nichts anfangen, da man zum Importieren eines Zertifikats bei den meisten Programmen nach einer .pfx oder ähnlichen Datei gefragt wird. So ist es auch, wenn wir beim bisher viel erwähnten Beispiel des Microsoft Exchange Servers bleiben. Um nun eine solche Datei zu erstellen, bedarf es noch ein paar Schritten, die ich jetzt erklären möchte.

  1. Jetzt arbeiten wir mit Root-Rechten weiter. Hierzu sudo -i eingeben.
  2. Danach navigieren wir in das von Certbot angelegte Verzeichnis. cd /etc/letsencrypt/live/<Domain>/ , wobei <DOMAIN> wieder zu ersetzen ist.
  3. Jetzt folgenden Befehl ausführen. openssl pkcs12 -export -out zertifikat.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem -password pass:<PASSWORD> – <PASSWORD> sollte dementsprechend auch wieder ersetzt und auch gemerkt werden werden. Ohne das Passwort kann die .pfx sonst nicht importiert werden.
    • Anmerkung: openssl ist bei Debian bereits vorinstalliert. Bei anderen Linux Distros, kann das anders aussehen. Sollte der Befehl nicht funktionieren, dann bitte erst openssl installieren und erneut probieren.
  4. Zum Schluss kopiere ich den letsencrypt Ordner einfach auf den Desktop meines PCs, damit ich einfacher an das fertige Zertifikat komme. Dazu führe ich folgenden Befehl aus: cp -R /etc/letsencrypt/* /mnt/c/Users/<WINDOWS-USER>/Desktop/letsencrypt
    • Hinweis: Den Teil des Pfades „/mnt/c/Users/<WINDOWS-USER>“ kann man einfach aus den Eingaben vor „sudo -i“ übernehmen dort ist der Pfad immer in blauer Schrift zu sehen. Die Option -R beim Befehl cp sogt dafür, dass alle Unterordner mitkopiert werden. Den Ordner C:\Users\<WINDOWS-BENUTZER>\Desktop\letsencrypt habe ich vorher händisch angelegt.
Beispiel Blauer Pfad
Beispiel, was mit Pfad in blauer Schrift gemeint ist