Inhalt

Acme.sh - SSL Zertifikate Verwalten

Vorwort

Seit 2015 bietet die Zertifizierungsstelle (CA) LetsEncrypt kostenlose SSL/TLS Zertifikate an. Diese haben jeweils eine Laufzeit von 90 Tagen und können beliebig viele Hostnamen abdecken, von normaler Domain bis Wildcard kann alles abgedeckt werden. Das Ziel des Projekts ist es, das Web sicherer zu machen und möglichst allen Menschen den Zugang zu kostenlosen Zertifkaten zu ermöglichen.

ACME.sh ist ein Shellscript, welches die Verwaltung eben jener Zertifikate enorm vereinfacht und durch Einbinden von API’s auch weitere Möglichkeiten zum Bezug eröffnet.

Ich benutze Acme.sh seit langer Zeit, da sich jedoch Handhabung des Scripts, als auch die API meines DNS Providers (hier Cloudflare) immer wieder ändern und ich nicht immer alle Beiträge nachträglich editieren möchte, in denen irgendwo ein SSL Zertifikat vorkommt, folgt nun dieser Beitrag.

Installation und Konfiguration von ACME.SH

Installation

Die Installation ist recht simple und kann entweder mit einem Einzeiler abgeschlossen werden, oder durch das Clonen des Repository von Github - beide Varianten sind schnell erledigt:

Einzeiler:

1
curl https://get.acme.sh | sh -s email=admin@domain.tld

Bezug aus dem Github Repository:

1
2
3
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m admin@domain.tld

In beiden Fällen sollte während der Installation ein Mailkonto angegeben werden, an welches Ablaufmeldungen gesendet werden, sollte eines der Zertifikate bald ablaufen oder es andere (technische) Probleme geben.

Konfiguration

Zuerst setze ich in meinen Installationen immer die Zertifizierungsstelle von LetsEncrypt als Standard ein.

1
acme.sh --set-default-ca --server letsencrypt

Dann hinterlege ich die Accountdaten des DNS Providers - in meinem Falle Cloudflare. Hierfür sind zwei Credentials notwendig: Die Account-ID, sowie ein passender Token. Beides wird im folgenden Absatz beschrieben:

Die Account-ID lässt sich im Dashboard unter Übersicht > Konto-ID finden und lässt sich mit einem Klick kopieren.

/images/acme-01.png

Die Beantragung des Tokens erfolgt unter Einstellungen - Profil - API-Token. Dort kann ein Neuer Token erstellt werden, als Berechtigung genügt hier die Vorlage zum Zonen-DNS bearbeiten:

/images/acme-02.png

Im folgenden Schritt erfolgen dann weitere Konfigurationen:

/images/acme-03.png

Schritt 1: Ich empfehle einen eigenen Namen für den Token zu hinterlegen, um später Rückschlüsse auf den Token möglich zu machen.

Schritt 2: Hier besteht die Wahl zwischen Allen Zonen oder Spezifischen Zonen. Meine Empfehlung lautet hier, das ganze so restriktiv wie möglich zu gestalten

Schritt 3: Hier werden nur jene Domains ausgewählt, welche später mit diesem Token / auf dem obigen Server mit SSL Zertifikaten ausgestattet werden sollen.

Im letzten Schritt, Schritt 4, erfolgt die Zusammenfassung bevor der Token ausgegeben wird.

Achtung: Der Token wird nur einmalig angezeigt, sichert diesen unbedingt!

Im letzten Schritt werden die gewonnen Daten noch an ACME.sh übergeben:

1
2
export CF_Account_ID="<eure-Account-ID>"
export CF_Token="derGeheimeToken"

Beantragung neuer Zertifikate

Zuerst muss das passende Verzeichnis erstellt werden, welches später die SSL Zertifikate beinhalten soll, hierfür erstelle ich pro Domain ein eigenes Unterverzeichnis, sowie ein weiteres Unterverzeichnis für RSA oder ECC Zertifikate.

1
2
mkdir -p /etc/letsencrypt/domain.tld/ecc
mkdir -p /etc/letsencrypt/domain.tld/rsa

Danach können folgende Befehle abgesetzt werden, zunächst ein Beispiel für die Beantragung eines RSA SSL Zertifikats für eine Domain, anschließend das gleiche in grün noch einmal mit der ECC Variante:

RSA Zertifikat

1
acme.sh --issue --dns dns_cf --accountemail "admin@domain.tld" -d domain.tld --keylength 4096 --key-file /etc/letsencrypt/domain.tld/rsa/key.pem --ca-file /etc/letsencrypt/domain.tld/rsa/ca.pem --cert-file /etc/letsencrypt/domain.tld/rsa/cert.pem --fullchain-file /etc/letsencrypt/domain.tld/rsa/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx"

Anschließend werden die soeben erstellten Dateien installiert und der Webserver neu gestartet:

1
acme.sh --install-cert -d domain.tld --key-file /etc/letsencrypt/domain.tld/rsa/key.pem --fullchain-file /etc/letsencrypt/domain.tld/rsa/fullchain.pem --reloadcmd "service nginx reload"

ECC Zertifikat

1
acme.sh --issue --dns dns_cf --ecc --accountemail "admin@domain.tld" -d domain.tld --keylength ec-384 --key-file /etc/letsencrypt/domain.tld/ecc/key.pem --ca-file /etc/letsencrypt/domain.tld/ecc/ca.pem --cert-file /etc/letsencrypt/domain.tld/ecc/cert.pem --fullchain-file /etc/letsencrypt/domain.tld/ecc/fullchain.pem --reloadcmd "systemctl reload nginx"

Anschließend werden die soeben erstellten Dateien installiert und der Webserver neu gestartet:

1
acme.sh --install-cert -d domain.tld --key-file /etc/letsencrypt/domain.tld/ecc/key.pem --fullchain-file /etc/letsencrypt/domain.tld/ecc/fullchain.pem --reloadcmd "service nginx reload" --ecc