Damit ein Webbrowser eine verschlüsselte Verbindung zum Webserver aufbauen kann, ist ein SSL-Zertifikat notwendig. Vor einigen Jahren noch musst man für diese Zertifikate zahlen. Mittlerweile gibt es diese Zertifikate gratis. Man muss nur nachweisen können, dass man der Besitzer der Domain ist, für die man das Zertifikat ausstellen möchte. Auch viele Hostingprovider bieten die Nutzung von Let’s Encrypt Zertifikaten an. In diesem Beitrag zeigen wir, wie man per Shell-Zugang ein Zertifikat für die eigene Domain ausstellen kann.

Es gibt verschiedene Shell-Programme, die das Erstellen und auch die Installation unterstützen. Der Certbot von ACME kann Zertifikate automatisch ohne Ausfallzeit erstellen und installieren. Er hat auch einen Expertenmodus für Leute, die keine Autokonfiguration möchten. Er ist einfach zu benutzen, funktioniert auf vielen Betriebssystemen und hat eine grossartige Dokumentation.

Um Certbot zu installieren rufen wir folgenden Befehl auf

sudo apt-get install certbot python3-certbot-apache

Meistens reicht es dann

sudo certbot --apache

aufzurufen. Wer nginx verwendet kann „apache“ in beiden aufrufen einfach durch „nginx“ ersetzen. Damit wird auch die passende Konfiguration am Apache/Nginx vorgenommen. Jetzt sollte die eigene Webseite schon per https:// erreichbar sein. Wer das lieber zu Fuß macht kann auch folgende Befehl verwenden

sudo certbot certonly --apache

Certbot erneuert die Zertifikate bevor sie ablaufen. Sie gelten maximal für 3 Monate. Ist es einmal eingerichtet, braucht man sich aber nicht mehr darum kümmern. Will man sicherstellen, dass das Erneuern auch wirklich klappt kann man folgenden Befehl ausführen.

sudo certbot renew --dry-run

Natürlich können auch viele Parameter verändert werden. Der Befehl

certbot --help all

listet alle Parameter auf. Die wichtigsten sind

-w /PATH/TO/WEBROOT oft /var/www
-d meineDomain.at – Domain für die das Zertifikat ausgestellt werden soll
–rsa-key-size 4096
–key-path Pfad wohin der Private-Key gespeichert werden soll

Wer seine SSL-Installation prüfen möchte, kann unter https://www.ssllabs.com/ssltest einen Test ausführen. Dort gibt’s auch viele Hinweise, wie die Konfiguration noch verbessert werden kann.

Automatische Wildcard Zertifikate

Ein Wildcard Zertifikate ist ein Zertifikat, dass man auch für Subdomains verwenden kann, also mail.linux-bildung.at, www.linux-bildung.at, demo.linux-bildung.at. Man braucht nur ein Zertifikat (*.linux-bildung.at) und nicht drei.

Dieses Mal verwenden wir nicht certbot sondern acme.sh, um einen weiteren Client kennenzulernen.

git clone https://github.com/acmesh-official/acme.sh.git

Wir wechseln ins Verzeichnis und installieren acme nach /opt/acme.sh, damit später der cron job, der das Zertifikat regelmäßig erneuert, auch läuft.

cd acme.sh
./acme.sh --install --home /opt/acme.sh --config-home /etc/acme.sh --accountemail "mein@mailadresse.at"

Wer möchte kann das Repository nach der Installation wieder löschen

cd ..
rm -rf acme.sh

Unter folgender URL gibt es viele Beispiele.
https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert. Ein üblicher Aufruf sieht wie folgt aus:

acme.sh --issue --test --keylength 4096 --domain meine.domain --webroot /var/www/meine.domain --cert-file /etc/ssl/certs/meine.domain.cert.pem --key-file /etc/ssl/private/meine.domain.key.pem --ca-file /etc/ssl/certs/meine.domain.ca.pem --fullchain-file /etc/ssl/certs/meine.domain.chain.pem 

Wichtig ist hier der Parameter –test. Damit kann man beliebig oft herumexperimentieren, weil Let’s Encrypt die Anzahl der ausgestellten Zertifikate auf 5 pro Woche beschränkt. Geht der Test gut, dann ersetzt man –test mit –force, damit die Testzertifikate überschrieben werden. Man kann aber auch gleich ohne –test drauf loslegen, dann ist der Parameter –force auch nicht notwendig.

Normalerweise läuft die Erstellung über den Webserver. acme.sh erstellt eine temporäre .well-known-Datei am Webserver und Let’s Encrypt versucht diese dann vom Webserver herunterzuladen. Klappt das, bekommt man ein Zertifikat. Bei Wildcardzertifikaten ist das anders. Da ist ein Eintrag am DNS-Server zu machen, weil die Domain über den DNS validiert wird.

Nachteil an der DNS-Validierung ist, dass eine Erneuerung des Zertifikats nur möglich ist, wenn DNS-Einträge auch per API verändert/hinzugefügt werden können. Natürlich gibt es auch einen manuellen Weg, der ist aber etwas mühsam, weil immer auch gewartet werden muss, bis die DNS-Einträge entsprechend verteilt sind. Also Workaround gibt es den Alias-Mode.

Für unser Beispiel verwenden wir die DNS-API unseres Providers netcup. Ob ein Provider/Hoster deine DNS-API unterstützt kann hier nachgelesen werden. https://github.com/acmesh-official/acme.sh/wiki/DNS-alias-mode.

Zuerst setzten wir ein paar Umgebungsvariablen. Das ist nur einmal notwendig. acme.sh merkt sich diese. Die Werte der Variablen bekommt man von seinem DNS-Provider und abhängig davon kann das ein Wert oder mehrere Werte sein

export NC_Apikey="XYZ"
export NC_Apipw="ABC"
export NC_CID="1234"

Jetzt können wir ein Zertifikat ausstellen.

acme.sh --issue --dnssleep 500 --dns dns_netcup -d '*.linux-bildung.at'

Der Parameter –dnssleep ist die Zeit in Sekunden, die gewartet werden muss, bis alle txt-Datensätze im DNS-API-Modus wirksam werden.

Mit dem Standardwert 300 hat es nicht geklappt.

(Foto: pixabay.com)

Kategorien: DachsbergTools

2 Kommentare

maddin · 17.02.2022 um 20:33

Hi,
bin gerade per Internetsuche auf diese sehr gute Seite gestoßen. Ich habe ein Raspberry Pi 4 und würde gerne wissen, ob die acme.sh Einstellungen auch damit funktionieren?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert