Let’s Encrypt

Allgemeines

Let’s Encrypt ist ein neuer Dienst für kostenlose SSL-Zertifikate. Dieses BASH-Script automatisiert das Erstellen von den Keys und Zertifikaten.

Abhänigkeiten

  • acme-tiny
  • Webserver
  • Phyton
  • OpenSSL
  • NetCat
  • Wget
  • Cron (Optional)

Funktion

Info folgt noch

Einrichtung

  1. Als root den folgenden Befehl ausführen:
    curl https://dl.thju.de/CryptOn/CryptOn-11.tar | tar -v --absolute-names -x --keep-old-files
  2. In Das Verzeichnis für die Konfigurationsdateien wechselncd /opt/CryptOn/etc/CryptOn
  3. Datei /opt/CryptOn/etc/CryptOn/defaults anpassen.
  4. Für jedes Zertifikat eine .conf datei in /opt/CryptOn/etc/CryptOn/ anlegen
  5. Script ausführen
    /opt/CryptOn-Vorlage/bin/CryptOn
  6. Script in Cron eintragen (täglich ausführen)
  7. Konfigurationen von Anwendungen, welche dieses Keys / Zertifikate benutzen sollen umstellen. Die Keys liegen in /opt/CryptOn/etc/ssl/(domainname)

Variablen

  • CONFDIR: Phat zum Verzeichnis mit Config-Dateien (Optional)
  • ACCOUNTKEY: Phat zum Account-Key. Der Key kann mit dem Befehl “openssl genrsa 4096 > account.key” erstellt werden. Dieser Key muss gut gesichert werden. Der Account-Key kann für alle Domains benutzt werden.
  • KEYDIR: Hauptverzeichnis für die Generierten Keys.
  • DOMAIN: Auf diese Domain wird das Zertifikat ausgestellt (Nur eine Domain zulässig!)
    z.B: “DOMAIN=example.com”
  • ALTDOMAINS: Alternative Domain-Namen (Die DOMAIN wird hier automatisch eingetragen)
    z.B: “ALTDOMAINS=”www.example.com example.net www.example.net”
  • COUNTRY: Kürzel des Landes (DE für Deutschland)*
  • STATEORPROVINCENAME: Bundesland*
  • CITY: Stadt*
  • EMAIL: e-Mail-Adresse*
  • WEBROOT: Dieses Verzeichnis muss von den Let’s Encrypt-Server auf Port 80 über HTTP erreichbar sein (Domain und alle ALTDOMAINS!)
  • ACMETINY: Vollständiger Phat zu acme_tiny.py
  • WEBSERVERRESTARTCMD: Dieses Kommando wird nach erfolgreicher Erstellung von dem Zertifikat ausgeführt. (/bin/true eintragen, wenn nichts ausgeführt werden soll)
  • IMAPRESTART: Dieses Kommando wird nach erfolgreicher Erstellung von dem Zertifikat ausgeführt. (/bin/true eintragen, wenn nichts ausgeführt werden soll)
  • SMTPRESTART: Dieses Kommando wird nach erfolgreicher Erstellung von dem Zertifikat ausgeführt. (/bin/true eintragen, wenn nichts ausgeführt werden soll)
  • CHOWN: Benutzer und Gruppe für Keys werden festgelegt
    CHOWN=”root:ssl-cert” für Benutzer root und die Gruppe ssl-cert
  • CHMOD: Standard CHMOD=”o-rwx” entfernt alle Rechte für Sonstige Benutzer. Dienste, welche diese Keys benötigen müssen Mitglied ind er Gruppe sein.
  • ACMESUBDIR: Standard-Unterverzeichnis für die ACME-Challenge (Dieses sollte nicht geändert werden)
  • RENEWDAYS:Restlaufzeit des Zertifikates in Tagen, bevor es erneuert wird. Ich Empfehle 15 Tage. Bei 91 Tagen würde das Script bei jedem aufruf das Zeritifikat erneuern

* Diese Angaben werden in den Certificate-Signing-Request (CSR) eingetragen. Let’s Encrypt übernimmt diese vermutlich nicht. Eventuell werden diese Angaben bei einer späteren Version von dem BASH-Script entfernt.

Hinweis: Das Script kann nur 1 Zertifikat erstellen. Werden mehrer Zertifikate benötigt, muss das Script kopiert werden. (Ab Version 06 vom 08.02.2017 werden Config-Dateien unterstützt). Per SAN (ALTDOMAINS) können mehrer Domains in einem Zertifikat eingetragen werden.

TIPP: Für alle Domains den gleichen Challenge-Ordner nehmen und in der Webserver-Config per Alias richtig verknüpfen.

Überprüfen

In dem Ordner $KEYDIR/$DOMAIN/keys liegen die neu erstellen Schlüssel und Zertifikate. Im Fehlerfall bleibt der aktuelle keys Ordner erhalten und die Daten von dem Fehlgeschlagen versuch sind in keys-temp-[datum] zu finden.

In der log.txt kann man sich die ausgaben von der Erstell-Prozess anschauen. Das Script schreibt alle ausgaben in in log.txt. Eine Ausgabe auf die Konsole findet nicht statt.

Mit dem Befehl “openssl req -noout -text -in example.com.csr” kann man sich den Inhalt von dem Certificate-Signing-Request anschauen.

Mit dem Befehl “openssl x509 -noout -text -in example.com.crt” kann man sich den Inhalt von dem Zertifikat anschauen.

Config-Dateien

Beispiel von einer “defaults” Config

Beispiel von einer “example.conf”

Code / Script

acme-tiny von Github

Download von acme-tiny!

Zukünftige mögliche Verbesserungen

  • Unterstützung von Config-Dateien. Seit Version 06 vom 08.02.2017 vorhanden
  • Überprüfung des Ablaufsdatum eines Zertifikates. Seit Version 06 vom 08.02.2017 vorhanden

Changelog

Version 11 vom 01.01.2021

  • Let’s Encrypt hat die Chain of Trust geändert. Neue Zwischenzertifikate eingebaut.

Version 10 vom 05.01.2019

  • Bug mit neuer acme_tiny.py Version gefixed
  • Schlüssellänge (BITS) sind pro Domain Einstellbar
  • In der /etc/hosts kann 127.0.0.1 für die Angefragten Domains hinzugefügt werden. Ist für Spezielle Anforderungen hinter NAT-Routern

Version 08 vom 27.05.2017

  • Installation vereinfacht
  • Pfade für Dateien angepasst. Es liegen jetzt nach dem Entpacken alle Dateien in /opt/CryptOn.
  • Account Key wird jetzt bei Bedarf erstellt
  • Name in CryptOn geändert

Version 07 vom 22.03.2017

  • Rechte für *.pem Datei wurden nicht gesetzt

Version 06 vom 08.02.2017

  • Unterstützung für Konfigurations-Dateien hinzugefügt
  • Prüfung der Restlaufzeit von dem Zertifikat hinzugefügt

Version 05 vom 14.04.2016

  • Zwischenzertifikat vom x1 aus x3 umgestellt

Version 04 vom 04.02.2016

  • Erste Veröffentlichung

Rückmeldung (Feedback)

Rückmeldung als Kommentar oder e-Mail (siehe Impressum) ist willkommen.