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
- Als root den folgenden Befehl ausführen:
curl https://dl.thju.de/CryptOn/CryptOn-11.tar | tar -v --absolute-names -x --keep-old-files
- In Das Verzeichnis für die Konfigurationsdateien wechselncd /opt/CryptOn/etc/CryptOn
- Datei /opt/CryptOn/etc/CryptOn/defaults anpassen.
- Für jedes Zertifikat eine .conf datei in /opt/CryptOn/etc/CryptOn/ anlegen
- Script ausführen
/opt/CryptOn-Vorlage/bin/CryptOn - Script in Cron eintragen (täglich ausführen)
- 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
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.