Let's Encrypt Skripts für Hosteurope WebHosting
Switch branches/tags
Nothing to show
Clone or download

README.md

Let's Encrypt Skripte für Hosteurope WebHosting

Dies ist eine Sammlung kleiner Python 3 Skripte, um die Erstellung und Validierung von Let's Encrypt SSL Zertifikaten in Verbindung mit Hosteurope WebHosting Paketen so weit als möglich zu automatisieren.

Die Skripte automatisieren folgende Schritte:

  • Aufruf des certbot mit den richtigen Optionen, um ein Sammel-Zertifikat für die gewünschten Domains zu erstellen oder zu verlängern
  • Hochladen der von certbot vorgegebenen Validierungstokens für die einzelnen Domains mittels FTP

Das abschließende Einbinden des Zertifikats bleibt ein manueller Schritt, da Hosteurope dafür keine API bietet, die eine Automatisierung ermöglicht.

Anforderungen

Für die Nutzung der Skripte wird benötigt:

Die Skripte wurden unter Linux getestet und das Vorgehen auf meinem Blog beschrieben.

Konfiguration

Die Skripte werden mittels 3 JSON Dateien konfiguriert, die manuell zu erstellen sind. Die Konfigurationsdateien müssen entweder im gleichen Verzeichnis wie die Python Skripte oder im Verzeichnis ~/.config/hosteurope-letsencrypt liegen.

In der Datei einstellungen.json wird die im Zertifikat zu hinterlegende Emailadresse gepflegt. Weiterhin wird konfiguriert, ob die Staging Umgebung von Let's Encrypt verwendet werden soll. Die Staging Umgebung sollte man nutzen, wenn man kein richtiges Zertifikat erstellen will, sondern zum Beispiel noch mit den richtigen Parametern experimentiert.

{
  "email": "webmaster@example.com",
  "staging": false
}

In der Datei domains.json gibt man die Domains an, für die ein Zertifikat erstellt werden soll. Neben den Domainamen muss weiterhin der Pfad auf dem FTP Server angegeben werden, damit die Skripte die von certbot vorgegebenen Validierungstoken an den richtigen Stellen platzieren können.

{
    "domain1.example.com": "domain1",
    "domain2.example.com": "domain-2/komischer_pfad"
}

Es können natürlich nicht nur Sub-Domains, sondern alle im WebHosting Paket enthaltenen Domains angegeben werden. Da Let's Encrypt erst experimentelle Unterstützung für Wildcard Zertifikate bietet, muss jede Sub-Domain einzeln aufgeführt werden!

In der Datei ftp.json gibt man die FTP Zugangsdaten an. Diese werden vom validate.py Skript genutzt, um per FTP die entsprechenden Validierungstoken auf dem Webserver zu platzieren.

{
    "server": "ftp-server.hosteurope.de",
    "login": "ftp-user",
    "passwort": "GEHEIM"
}

Das Skript löscht die hochgeladenen Tokens nicht. Die Tokens liegen im jeweiligen Domainpfad auf dem Webserver im Unterverzeichnis .well-known/acme-challenge.

Nutzung

Ein neues Zertifikat wird erstellt mittels:

sudo python3 neu.py

Ein bestehendes Zertifikat wird verlängert mittels:

sudo python3 verlaengern.py

Die Skripte müssen mit Root-Rechten laufen, da certbot die generierten Zertifikate unter /etc/letsencrypt ablegt.

Die folgenden Abschnitte erklären im Detail, was bei jedem Skript genau geschieht.

Zertifikat erstellen (neu.py)

Das Skript neu.py ruft certbot auf und fordert die Erstellung eines Zertifikats für alle in domains.json angegebenen Domains an.

Um eine Domain gegenüber Let's Encrypt zu validieren, muss eine Datei hochgeladen werden. Dazu wird beim Aufruf von certbot das validate.py Skript übergeben. Dieses erhält von certbot Namen und Inhalt der hochzuladenden Datei und lädt diese via FTP auf den Hosteurope Webserver hoch.

Da certbot Ausgaben des validate.py Skripts unterdrückt, werden Debug Meldungen in die Datei validation.log geschrieben.

Nachdem das Zertifikat erstellt wurde, muss es manuell im KIS eingebunden werden.

Zertifikat verlängern (verlaengern.py)

Let's Encrypt Zertifikate haben eine Gültigkeit von 90 Tagen. Deshalb müssen die Zertifikate verlängert werden. Falls man in einstellungen.json eine gültige Emailadresse angegeben hat, wird man von Let's Encrypt einige Tage vor Ablauf daran erinnert.

Es muss kein komplett neues Zertifikat erstellt werden, sondern ein bestehendes Zertifikat kann verlängert werden. Das verlaengern.py Skript führt diese Verlängerung durch. Dazu wird wiederum mittels validate.py die Domain gegenüber Let's Encrypt validiert.

Nachdem das Zertifikat verlängert wurde, muss es manuell über das KIS eingebunden werden.

Zertifikate können nur verlängert werden, wenn die zugehörigen Dateien nicht gelöscht wurden. certbot legt alle zu einem Zertifikat zugehörigen Dateien unterhalb von /etc/letsencrypt ab. Die Zertifikatsdateien enthalten eine Nummer in ihrem Dateinamen, die bei jeder Verlängerung um 1 hochgezählt wird. Das neueste Zertifikat ist immer jenes, mit der höchsten Nummer im Dateinamen.

Zertifikat manuell im KIS einbinden

Durch certbot wird ein Zertifikat erstellt, das alle angegebenen Domains abdeckt. Dieses Zertifikat muss manuell im Hosteurope KIS als globales Zertifikat angegeben werden. Der entsprechende Menüpunkt findet sich unter:

Webhosting -> Sicherheit & SSL -> SSL administrieren

Soll ein neues Zertifikat hochgeladen werden, muss das oberste globale Zertifikat ersetzt werden. Dieses Zertifikat gilt für alle Domains und Sub-Domains, für die kein eigenes Zertifikat gesetzt ist.

certbot erzeugt 4 Dateien. Lediglich die folgenden 2 Dateien müssen im KIS im entsprechenden Formular hochgeladen werden:

  • Zertifikat: fullchain.pem
  • Key: privkey.pem

Das Passwort Feld muss leer bleiben!

Nach dem Hochladen startet Hosteurope den Webserver neu und das Zertifikat ist innerhalb weniger Minuten online.