Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

Let’s Encrypt Zertifikate (RSA 4096 oder EC 384) ohne offene TCP-Ports 80 und 443 beantragen und erstellen

turnserver

Um Let’s Enrcypt-Zertifikate mit einer Schlüssellänge von 4096 Bit (RSA) oder auf Basis der Elliptische-Kurven-Kryptografie (EC secp384r1 oder EC secp521r1) beantragen zu können, ohne zugleich die TCP-Ports 80 und 443 öffnen zu müssen, gehen Sie bitte wie folgt vor:

sudo -s

Installieren Sie zuerst die Software certbot, um die Zertifikate beantragen zu können:

apt install -y certbot

Rufen Sie dann folgenden Befehl auf, ersetzen aber bitte die exemplarische Domain mit Ihrer Domain.

certbot --manual --preferred-challenges dns certonly --rsa-key-size 4096 -d ihre.domain.de

Auch moderne Zertifikate (bspw. Elliptic Curve secp384r1 oder secp521r1) lassen sich beantragen, bspw. alternativ so:

certbot --manual --preferred-challenges dns certonly --elliptic-curve secp384r1 -d ihre.domain.de

Achtung, möchten Sie moderne (bspw. elliptic curve secp384r1) Zertifikate verwenden, installieren Sie ggf. aktuellere certbot-Versionen nach dieser Anleitung.

Für diesen Artikel verwenden wir ein RSA-Zertifikat mit einer Schlüssellänge von 4096 Bit: certbot –manual –preferred-challenges dns certonly –rsa-key-size 4096 -d ihre.domain.de

Übertragen Sie dann die Angaben aus der Konsole in Ihr DNS (bspw. bei ALL-INKL.COM) als TXT-Record ein:

Kehren Sie nun in die Konsole zurück und bestätigen Sie den Dialog mit <ENTER>. Achtung, die DNS.Replikation kann einige Zeit in Anspruch nehmen.

Sofern Sie die Nachricht „…Successfully received certificate….“ sehen, waren Sie erfolgreich und finden die Zertifikate unter

Certificate is saved at: /etc/letsencrypt/live/ihre.domain.de/fullchain.pem
Key is saved at: /etc/letsencrypt/live/ihre.domain.de/privkey.pem

wieder. Das bedeutet folgende Dateien finden Sie hier:

CERT:  /etc/letsencrypt/live/ihre.domain.de/cert.pem
CHAIN: /etc/letsencrypt/live/ihre.domain.de/chain.pem
FULLCHAIN: /etc/letsencrypt/live/ihre.domain.de/fullchain.pem
PRIVKey: /etc/letsencrypt/live/ihre.domain.de/privkey.pem

Die regelmäßige Erneuerung der Zertifikate können Sie bspw. über einen cron-Job oder den certbot.timer automatisieren:

crontab -e
@weekly /usr/bin/certbot renew > /dev/null 2>&1

Möchte man im Anschluss an das Renewal einen Dienst (bspw. nginx) neu starten, so erweitert man den Befehl um einen ‚renew-hook‘-Befehl:

@weekly /usr/bin/certbot renew --renew-hook 'systemctl restart nginx.service' > /dev/null 2>&1

Wichtig: Nach dem (erstmaligen) Anfordern des Zertifikates per dns challenge muss die renewal-config des Zertifikats geprüft und ggf. angepasst werden:

nano /etc/letsencrypt/renewal/ihre.domain.de.conf

Als Authenticator muss standalone gesetzt sein:

authenticator = standalone

Treten Probleme auf, so prüfen Sie den Systemdienst

systemctl enable certbot.timer
systemctl restart certbot.timer
systemctl status certbot.timer

und sehen in der dazugehörigen Logdatei nach:

/var/log/letsencrypt/letsencrypt.log

Ein bereits abgelaufenes Zertifikate kann bei Bedarf wieder reaktiviert/erneuert werden. Auch, wenn es zuvor mit einer anderen Methode (bspw. ‚challenge‘) erstellt wurde. Wichtig dabei ist, dass das abgelaufen Zertifiakt vorher mit

certbot delete

gelöscht wird.

Beispielsweise für die Nextcloud nutzen wir acme.sh. Hier empfiehlt sich ein Blick auf die API von acme um weiterhin die automatische Erneuerung der Zertifikate umsetzen zu können: Die Beantragung sieht bspw. wie folgt aus:

su - acmeuser
acme.sh --issue --dns dns_kas -d ihre.domain.de --server letsencrypt --keylength 4096 --key-file /etc/letsencrypt/privat/rsa/privkey.pem --ca-file /etc/letsencrypt/privat/rsa/chain.pem --cert-file /etc/letsencrypt/privat/rsa/cert.pem --fullchain-file /etc/letsencrypt/privat/rsa/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
acme.sh --issue --dns dns_kas -d ihre.domain.de --server letsencrypt --keylength ec-384 --key-file /etc/letsencrypt/privat/ecc/privkey.pem --ca-file /etc/letsencrypt/privat/ecc/chain.pem --cert-file /etc/letsencrypt/privat/ecc/cert.pem --fullchain-file /etc/letsencrypt/privat/ecc/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"

Viel Spaß wünscht Ihnen das Team von Carsten Rieger IT-Services!

Carsten Rieger IT-Services