Intermediate Zertifikat für acme-tiny

Wie im Artikel zu acme-tiny erwähnt muss ein eigenes Script zum regelmäßigen Erneuern der Let’s Encrypt Zertifikate erstellt werden. In diesem Script wird das passende Intermediate Zertifikat von Let’s Encrypt heruntergeladen, damit dem Besucher die vollständige Zertifizierungs-Kette übermittelt werden kann. Wird das Intermediate Zertifikat vom Webserver nicht ausgeliefert, fällt die Bewertung von SSL Labs auf “B” zurück.

SSL Labs Rating bei fehlendem Intermediate Zertifikat

Das Intermediate Zertifikat von Let’s Encrypt hat sich zwischenzeitlich geändert. In der Beschreibung zu acme-tiny bei Github wurde die URL zum Download deshalb angepasst.

Um jedoch einen weiteren Wechsel in Zukunft abzufangen kann die URL zum Download des Intermediate Zertifkats aus dem Zertifkat ausgelesen werden. Das vollständige Script könnte so ähnlich aussehen:

1
2
3
4
5
6
7
#!/bin/bash
python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ > /tmp/signed.crt || exit
URL=`openssl x509 -in signed.crt -text -noout | grep "CA Issuers - URI:" | cut -d":" -f2,3`
wget -O - $URL > /tmp/intermediate.der
openssl x509 -in /tmp/intermediate.der -inform der -outform pem -out /tmp/intermediate.pem
cat /tmp/signed.crt /tmp/intermediate.pem > /path/to/chained.pem
service nginx reload

In Zeile 3 wird die URL des Intermediate Zertifikats bestimmt und in Zeile 4 heruntergeladen. Zeile 5 ändert das Format des Intermediate Zertifikats und in Zeile 6 werden das Intermediate Zertifikat und das Zertfikat für die Domain kombiniert in einer Datei gespeichert (je nach Konfiguration und verwendeten Webserver evtl. nicht notwendig).