Umstieg von WoSign auf Let’s Encrypt bei Uberspace

In meinem Beitrag Blog jetzt verschlüsselt hatte ich dargelegt, dass die Übertragung der Daten chiffriert erfolgt. Nachdem nun Let’s Encrypt die Beta-Phase verlassen hat, habe ich mich auf Anregung meines Bloggerkollegen Frank von intux entschlossen, wie er ebenfalls auf dieses Zertifikat umzustellen und zwar so, dass es vor Ablauf automatisch erneuert bzw. eingebunden wird.
Das Vorhaben wird beim Hoster Uberspace über die Konsole erledigt. Einschlägige Grundlagen sind diese beiden Wikis:
https://wiki.uberspace.de/webserver:https
und
https://wiki.uberspace.de/system:cron

Wir loggen uns über ssh auf unserem Uberspace ein und beginnen:
(NUTZER ist im Folgenden durch den Uberspace-Namen zu ersetzen. Puppis ist der Name meines Servers, der gegebenenfalls zu ersetzen ist. Die Domains sind entsprechend den eigenen anzupassen)

 

[NUTZER@puppis ~]$ uberspace-list-domains -w
*.NUTZER.puppis.uberspace.de
*.dietmarjanowski.de
dietmarjanowski.de

 

[NUTZER@puppis ~]$ uberspace-letsencrypt
We have now created the following config file for you:

/home/NUTZER/.config/letsencrypt/cli.ini

Please review especially the domain list we have generated for you
and adapt the 'domains' setting if you want to make some changes:

www.dietmarjanowski.de
dietmarjanowski.de

When you're done you can use the official Let's Encrypt client by executing:

letsencrypt certonly

You can safely ignore all 'Root (sudo) is required to run most of letsencrypt functionality' warnings.

 

[NUTZER@puppis ~]$ letsencrypt certonly
-------------------------------------------------------------------------------
Please read the Terms of Service at https://letsencrypt.org/documents/LE-
SA-v1.0.1-July-27-2015.pdf. You must agree in order to register with the ACME
server at https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
2016-04-13 21:19:08,226:WARNING:letsencrypt.client:Non-standard path(s), might not work with crontab installed by your operating system package manager

IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to NUTZER@puppis.uberspace.de.
- Congratulations! Your certificate and chain have been saved at /hom
e/NUTZER/.config/letsencrypt/live/www.dietmarjanowski.de/fullchai
n.pem. Your cert will expire on 2016-07-12. To obtain a new version
of the certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /home/NUTZER/.config/letsencrypt. You
should make a secure backup of this folder now. This configuration
directory will also contain certificates and private keys obtained
by Let's Encrypt so making regular backups of this folder is ideal.
- If you like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

 

[NUTZER@puppis ~]$ ls -la /home/NUTZER/.config/letsencrypt/live/www.dietmarjanowski.de
insgesamt 8
drwxr-xr-x 2 NUTZER NUTZER 4096 13. Apr 21:19 .
drwx------ 3 NUTZER NUTZER 4096 13. Apr 21:19 ..
lrwxrwxrwx 1 NUTZER NUTZER 46 13. Apr 21:19 cert.pem -> ../../archive/www.dietmarjanowski.de/cert1.pem
lrwxrwxrwx 1 NUTZER NUTZER 47 13. Apr 21:19 chain.pem -> ../../archive/www.dietmarjanowski.de/chain1.pem
lrwxrwxrwx 1 NUTZER NUTZER 51 13. Apr 21:19 fullchain.pem -> ../../archive/www.dietmarjanowski.de/fullchain1.pem
lrwxrwxrwx 1 NUTZER NUTZER 49 13. Apr 21:19 privkey.pem -> ../../archive/www.dietmarjanowski.de/privkey1.pem
[NUTZER@puppis ~]$ uberspace-list-domains -w
*.NUTZER.puppis.uberspace.de
*.dietmarjanowski.de
dietmarjanowski.de

Hier wird das alte WoSign-Zertifikat entfernt:

[NUTZER@puppis ~]$ uberspace-del-certificate -c dietmarjanowski.de
removing certificate for dietmarjanowski.de...
The webserver's configuration is adapted; it will get active within at most 5 minutes.

Hier wird das neue LE-Zertifikat importiert:

[NUTZER@puppis ~]$ uberspace-add-certificate -k ~/.config/letsencrypt/live/www.dietmarjanowski.de/privkey.pem -c ~/.config/letsencrypt/live/www.dietmarjanowski.de/cert.pem
Found key...
Found certificate...
Key seems valid, moving on...
Certificate seems valid, moving on... (step by step)
Certificate matches key, moving on... (we're getting there!)
Magically getting intermediate certificate(s) if there are any needed... (hold on tight)
Checking for www.dietmarjanowski.de.
temporary webserver started...
certificate is valid.
killed temporary webserver...
All good! Your new certificate will be live within the next five minutes.

Damit sind die Erstellung und der Import abgeschlossen. Da die LE-Zertifikate nur drei Monate gültig sind, können wir sie manuell oder automatisch verlängern.

1. Manuell
Zunächst das Zertifikat erstellen:

[NUTZER@puppis ~] letsencrypt certonly

Dann importieren:

[NUTZER@puppis ~] uberspace-add-certificate -k ~/.config/letsencrypt/live/www.dietmarjanowski.de/privkey.pem -c ~/.config/letsencrypt/live/www.dietmarjanowski.de/cert.pem

2. Automatisch
Der folgende Eintrag verhindert die Interaktion mit dem Script. Hier sind alle Zeilen in die Konsole einzutragen, nachdem sich der Editor mit dem Eingangsbefehl geöffnet hat:

[NUTZER@puppis ~]$ cat >> ${HOME}/.config/letsencrypt/cli.ini <<__EOF__
# To prevent being forced to agree manually to the terms
agree-tos = True
__EOF__

Wir fertigen ein Skript, welches im nächsten Schritt wöchentlich von einem Cronjob aufgerufen wird. Es prüft, ob das Zertifikat noch länger als 10 Tage gültig ist, fordert ggf. ein neues an und importiert es automatisch.

[NUTZER@puppis ~]$ domain=$(grep -e "[ \t]*domains.*" ~/.config/letsencrypt/cli.ini| sed "s/ //g" |cut -d "=" -f2 | cut -d "," -f1)

Hier sind alle Zeilen in die Konsole einzutragen, nachdem sich der Editor mit dem Eingangsbefehl geöffnet hat:

[NUTZER@puppis ~]$ cat > ${HOME}/bin/letsencrypt-renew <<__EOF__
#!/bin/bash
PATH=$PATH

# sleep for a random time so not all certificates get renewed at the same time
sleep $(expr $RANDOM % 600)

openssl x509 -checkend $(( 10 * 86400 )) -in ~/.config/letsencrypt/live/${domain}/cert.pem > /dev/null

if [ \$? != 0 ]; then
# run let's encrypt
letsencrypt certonly
# import certificate
uberspace-add-certificate -k ~/.config/letsencrypt/live/${domain}/privkey.pem -c ~/.config/letsencrypt/live/${domain}/cert.pem
fi
__EOF__

Wir machen das Script ausführbar mit:

[NUTZER@puppis ~]$ chmod +x ${HOME}/bin/letsencrypt-renew

Nun  erstellen wir einen Crontab, damit das Script in bestimmten Abständen automatisch ausgeführt wird. Da in meinem Fall noch kein Crontab vorhanden war, habe ich einen neuen anlegen lassen:

[NUTZER@puppis ~]$ crontab -l
no crontab for NUTZER

 

[NUTZER@puppis ~]$ crontab -e
no crontab for NUTZER - using an empty one
crontab: installing new crontab

Der leere Crontab sollte sich mit dem Editor Nano öffnen. Es ist folgende Zeile einzutragen:

@weekly ~/bin/letsencrypt-renew

Dann in Nano mit Strg + o speichern und den Editor mit Strg + x verlassen.

Zur Kontrolle den Inhalt des Crontabs anzeigen lassen mit

[NUTZER@puppis ~]$ crontab -l
@weekly ~/bin/letsencrypt-renew

D-Day ist der 12. 7. 2016, denn dann wird das Zertifikat ablaufen und sich herausstellen, ob der Automatismus funktionieren wird.

5 comments on Umstieg von WoSign auf Let’s Encrypt bei Uberspace

  1. Danke für die Anleitung. Habe mich jetzt auch endlich dran gemacht. Kurze Zwischenfrage dazu: Die Zeile «Non-standard path(s), might not work with crontab installed by your operating system package manager» ist kein Anlass zur Sorge? Oder doch?

Schreibe einen Kommentar

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