14 Jul 2021

Letsencrypt von Wildcard zu Klassischem Zertifikat

Zur Anfang habe ich für diesen Blog ein Wild-Card-Zertifikat mit Let’s Encrypt angelegt. Warum ein Wildcard und nicht ein normales? Weil ich flexibel sein möchte, einfach neue Subdomains anzulegen. Die Validierung der Zertifikatsanfrage erfolgt hierbei über spezielle DNS-Einträge. Ich war zur Anfang davon ausgegangen, dass einmal angelegte Einträge zur Erneuerung genutzt werden könnten. Das ist leider nicht der Fall, sondern leider erfordert die vierteljährige Erneuerung immer neue DNS-Einträge. Mein Domainanbieter offeriert hierfür leider keine API und damit bleiben mir 3 Optionen:

  1. Die Erneuerung alle 3 Monate per Hand machen
  2. Eine eigene DNS-Infastruktur aufbauen
  3. Auf klassische Zertifikate umstellen

Option 1 ist keine echte Option, denn die Zertifikate sollten automatisch aktuallisiert werden. Option 2 ist zwar eine Idee, aber braucht mehr Vorbereitung. Damit bleibt vorerst Option 3. Dies ist möchlich, weil hier die HTTP-Challenge statt der DNS-Challenge genutzt werden kann und ich meinen HTTP-Server unter voller Kontrolle habe. Die Änderung habe ich wie folgt durchgeführt:

Als erstes muss man ermitteln, wie das Zertifikat intern heißt. Das geht mit einem einfachen Befehl:

root# ls /etc/letsencrypt/renewal/
ipoac.de.conf

In meinem Fall ergibt der Befehl ipoac.de.conf, das Zertifikat heißt intern also ipoac.de. Der genaue Name hängt unter anderem davon ab, in welcher Reihenfolge die Domains bei der Zertifikatserstellung angegeben wurden.

Als nächstes möchte ich wissen, welche genauen Domains alle im Zertifikat sind. Dazu kann man sich beispielsweise das Zertifikat im Browser anschauen. Bei mir sind das ipoac.de und *.ipoac.de. Letzteres ersetze ich durch www.ipoac.de, mit klassischem Zertifikaten und der HTTP-Challenge keine Wildcard-Zertifikate möglich sind und ich auf diesem Werver aktuell nur diese Subdomain brauche.

Im dritten Schritt lösche ich das alte Zertifikat wie folgt:

root# certbot delete --cert-name ipoac.de

In diesem Moment ist das Zertifikat gelöscht und der Webserver könnte beispielsweise nicht neu gestartet werden, da er das konfigurierte Zertifikat nicht findet. Das neue Zertifikat habe ich mit folgendem Befehl angelegt, wobei der Webserver noch gelaufen hat und die Website unter /var/www/html/ liegt:

root# certbot certonly --webroot --webroot-path /var/www/html/ -d ipoac.de -d www.ipoac.de

Dadurch, dass ipoac.de als erste angegebene Domain ist, heißt das Zertifikat intern wieder wie vorher und liegt unter dem selben Pfad. Dadurch muss auch der Webserver nicht umkonfigiriert werden.

Ich möchte an sich gerne wieder zu den Wild-Card-Zertifikaten zurück, aber hierfür fehlt entweder eine API beim Anbieter oder eine eigene DNS-Infastruktur. To be continued…