Wer seine Web­ser­ver mit den Diens­ten von letsencrypt.org absi­chert und den Daten­fluss vom Cli­ent zum Ser­ver mit Zer­ti­fi­ka­ten ver­schlüs­seln lässt (https) muss unter Umstän­den han­deln. Wenn Sie bis­her auf die TLS-SNI-01-Chal­lenge gesetzt haben, sind einige Anpas­sun­gen not­wen­dig, um auch ins­künf­tig auto­ma­tisch die Zer­ti­fi­kate von letsencrypt.org ohne Pro­bleme zu erhal­ten. Per 13. Februar 2019 wird TLS-SNI-01 vor­über­ge­hend und dann per 13. März 2019 defi­ni­tiv abgeschaltet.

Zum Glück ist ein Wech­sel nicht schwie­rig (Kurz­an­lei­tung hier auf letsencrypt.org):

Stel­len Sie zuerst die Ver­sion von Cert­bot fest, die auf Ihrem Sys­tem vor­han­den ist:

certbot --version || /path/to/certbot-auto --version

Wenn Sie auf einer Ver­sion vor 0.28 sind, dann müs­sen Sie den Cert­bot updaten. Für Ubuntu 18.04 geht das wie folgt (wei­tere Deri­vate und die pas­sende Anlei­tung fin­den Sie auf certbot.eff.org):

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-apache

Über­prü­fen Sie danach noch­mals die instal­lierte Ver­sion. Sie soll­ten nun auf der Ver­sion 0.28 (Stand 04.02.2019) sein:

certbot --version || /path/to/certbot-auto --version
Aus­gabe der instal­lier­ten Ver­sion von Certbot.

Nun müs­sen die Kon­fi­gu­ra­ti­ons­da­teien anpas­sen, damit nicht mehr auf die TLS-SNI-01-Chal­lenge gesetzt wird. Der nach­fol­gende Befehl setzt die Chal­lenge auf HTTP-01. Andere Chal­len­ges fin­den Sie auf der ent­spre­chen­den man page.

sudo sh -c "sed -i.bak -e 's/^\(pref_challs.*\)tls-sni-01\(.*\)/http-01/g' /etc/letsencrypt/renewal/*; rm -f /etc/letsencrypt/renewal/*.bak"

Nun soll­ten Sie einen Tro­cken­lauf durch­füh­ren und tes­ten, ob alles funktioniert:

sudo certbot renew --dry-run

Wenn bei die­sem Tro­cken­lauf Feh­ler­mel­dun­gen zu den Ver­zeich­nis­sen /etc/letsencrypt/post-hook.d/, /etc/letsencrypt/pre-hook.d/ und /etc/letsencrypt/renew-hook.d/ auf­tau­chen, dann haben Sie mit gröss­ter Wahr­schein­lich­keit einige Cert­bot-Ver­sio­nen über­sprun­gen. Das ist halb so wild, erstel­len Sie ein­fach die feh­len­den Ver­zeich­nisse (wei­tere Hin­weise dazu auf github.com):

sudo mkdir /etc/letsencrypt/post-hook.d/ /etc/letsencrypt/pre-hook.d/ /etc/letsencrypt/renew-hook.d/

Im Prin­zip ist nun alles erle­digt. Der Cert­bot wird beim nächs­ten Mal nun auf die HTTP-01-Chal­lenge set­zen und die Zer­ti­fi­kate erneuern. 

Mel­dung über feh­lende Ver­zeich­nisse (z.B. /etc/letsencrypt/post-hook.d/, /etc/letsencrypt/pre-hook.d/ und /etc/letsencrypt/renew-hook.d/) und die ver­al­tete und unsi­chere TLS-SNI-01-Challange.

Ich habe es aber bevor­zugt, die Erneue­rung sofort durch­zu­füh­ren. Falls spä­ter irgend­wann der Cron­job star­tet und irgend­et­was doch nicht so läuft, wie es eigent­lich sollte, hat man das Geschenk. Und auf Not­fall­übun­gen kann ich gut verzichten.

Um die Zer­ti­fi­kat­s­er­neue­rung sofort zu erzwin­gen, ver­wen­den Sie die­sen Befehl:

sudo certbot renew --force-renewal

Wie Sie im Bild wei­ter oben aber sehen kön­nen, hat der Cert­bot wei­ter­hin die TLS-SNI-01-Chal­lenge ange­wandt, obwohl die Kon­fi­gu­ra­ti­ons­da­teien ange­passt waren. Der Grund dafür waren zwei unter­schied­li­che Cert­bot-Pakete (wei­tere Hin­weise gibt es in die­sem github.com-Issue). Sie kön­nen einen Ver­sio­nen­kon­flikt auf Ihrem Ser­ver wie folgt überprüfen:

sudo dpkg --list | grep -E "python.?-certbot"

Die Aus­gabe kann dann so aussehen:

Ver­si­ons­kon­flikt von unter­schied­li­chen cert­bot-Pake­ten: die “3” bei python3-cert­bot-apa­che spielt eine Rolle.

Man sieht sofort, dass unter “python3-cert­bot-apa­che” immer noch eine Ver­sion 0.23.0–1 exis­tiert. Das ver­al­tete Paket kön­nen Sie ganz ein­fach ent­fer­nen und die aktu­elle Ver­sion instal­lie­ren und danach noch­mals die Ver­sio­nen prüfen:

#Deinstallation der alten und Installation der neuen Version
sudo apt remove python3-certbot-apache -y && sudo apt install python-certbot-apache -y

#Versionen prüfen
sudo dpkg --list | grep -E "python.?-certbot"

Aus­gabe der kor­rek­ten Certbot-Versionen.

Danach tes­ten Sie alles noch­mals mit einem Tro­cken­lauf oder einem Erneuerungsdurchgang:

#Trockenübung ohne Zertifikatserneuerung
sudo certbot renew --dry-run

#Zertifikate sofort erneuern
sudo certbot renew --force-renew

Sämt­li­che kon­fi­gu­rier­ten Zer­ti­fi­kate wer­den nun mit der HTTP-01-Chal­lenge erneu­ert. TLS-SNI-01 ist damit Geschichte und Ihr Ser­ver für die Zukunft gerüstet.