Let’s Encrypt – Pro­ble­me mit der Erneue­rung der Zertifikate

Let's Encrypt

Mit Let’s Encrypt kann man sich kos­ten­los und schnell SSL-Zer­ti­fi­ka­te erstel­len las­sen, dazu benö­tigt man nur das Pro­gramm auf dem Ser­ver. Eben hat­te ich ein Pro­blem damit, das Zer­ti­fi­kat zu erneuern.

Admi­nis­tra­to­ren mit Root-Zugang kön­nen sich mit Let’s Encrypt rela­tiv schnell und kos­ten­los SSL-Zer­ti­fi­ka­te erstel­len las­sen. Dazu instal­liert man ein­fach (neu­er­dings) nur cert­bot („apt-get install cert­bot ‑t jes­sie-back­ports”) und kann mit­tels „cert­bot cer­ton­ly” gül­ti­ge Zer­ti­fi­ka­te erstel­len lassen.

Let’s Encrypt nut­ze ich schon seit der Beta und ver­wen­de es, um jeg­li­che Web­sei­ten und sons­ti­ge Inhal­te mit einem SSL-Zer­ti­fi­kat aus­zu­stat­ten. Der ent­schei­den­de Vor­teil liegt natür­lich dar­in, dass der kom­plet­te Traf­fic ver­schlüs­selt wird und nie­mand nach­voll­zie­hen kann, was der Besucher/Nutzer gera­de dort macht.

Die Zer­ti­fi­ka­te kann man sich kos­ten­los erstel­len las­sen und haben eine Gül­tig­keit von drei Mona­ten. Kurz vor den drei Mona­ten soll­te man logi­scher­wei­se die Zer­ti­fi­ka­te erneu­ern, sodass auch wei­ter­hin der Brow­ser (und Co.) die Ver­bin­dung als sicher ein­stuft und der Nut­zer kei­ne Feh­ler­mel­dung ange­zeigt bekommt.

Neu­er­dings wird cert­bot für alles genutzt und damit ist es unter ande­rem auch mög­lich, die Zer­ti­fi­ka­te auto­ma­tisch erneu­ern zu las­sen. Ich mache aber nach wie vor alles noch manu­ell, auch das Erneu­ern (Ver­län­gern) der Zertifikate.

Mit cert­bot wur­de damals bei mir auch ein cron­job erstellt, der so ziem­lich jeden Tag die Gül­tig­keit des Zer­ti­fi­kats prüft und gege­be­nen­falls die­se erneu­ert. Da man aber den root-Zugang (auf Web-Root und Co.) benö­tigt, muss vor­her nginx gestoppt wer­den. In mei­nem Fall (Debi­an 8.5 mit nginx) ist das jedes Mal aber ins blaue gelau­fen, da der auto­ma­tisch erstell­te cron­job für die Über­prü­fung nginx nicht stoppt (und danach wie­der startet).

Dem­nach ist mit der Zeit vie­le Über­prü­fun­gen gestar­tet wor­den, vie­le schei­ter­ten und vie­le steck­ten noch fest, sodass ich eben vor dem Pro­blem stand, mei­ne Zer­ti­fi­ka­te nicht manu­ell erneu­ern zu kön­nen auf­grund des­sen. Feh­ler­mel­dung: „The­re were too many requests of a given type :: Error crea­ting new authz :: Too many curr­ent­ly pen­ding authorizations”.

Dum­mer­wei­se wäre mein altes Zer­ti­fi­kat mor­gen abge­lau­fen und die Besu­cher hier hät­ten eine Feh­ler­mel­dung erhal­ten, dass sie (wahr­schein­lich) eine unsi­che­re Web­sei­te auf­ru­fen möch­ten. Da natür­lich nicht jeder so tech­nisch ver­siert ist, ist das natür­lich „für die brei­te Mas­se” kata­stro­phal für mich, sodass ich nach einem Work­around suchen musste.

Wer nun das­sel­be Pro­blem hat, dass man wegen „Too many curr­ent­ly pen­ding aut­ho­riza­ti­ons” kei­ne neue Zer­ti­fi­ka­te erstel­len kann, kann ein­fach den Ord­ner von „/etc/letsencrypt” umbe­nen­nen, bei­spiels­wei­se in „/etc/letsencrypt_”. Mit „cert­bot cer­ton­ly” erstellt man dann qua­si ein kom­plett neu­es Pro­fil und kann wie­der die gewünsch­ten Zer­ti­fi­ka­te erstellen.

Nun soll­te man aber unbe­dingt beach­ten, dass man alle Zer­ti­fi­ka­te erneut gene­rie­ren las­sen muss. In mei­nem Fall nicht pro­ble­ma­tisch, da alle das­sel­be Ablauf­da­tum (näm­lich mor­gen) haben, sodass es für mich kei­nen Mehr­auf­wand war, alle Zer­ti­fi­ka­te noch­mal zu erstel­len. Eben­so soll­te man sicher­stel­len, dass in der nginx.conf der jewei­li­gen Web­sei­te auch den neu­en Pfad zum Zer­ti­fi­kat haben (soll­te sich die­ser nun geän­dert haben).

Den „alten Let’s Encrypt-Ord­ner” („/letsencrypt_”) wür­de ich vor­erst nicht löschen, son­dern behal­ten. Even­tu­ell benö­tigt man irgend­wann mal die alten Zer­ti­fi­ka­te oder kann sie ander­wei­tig gebrauchen.

Tipp: Wer manu­ell nginx stop­pen, die Zer­ti­fi­ka­te erneu­ern und anschlie­ßend nginx wie­der star­ten möch­te, kann die­sen Befehl nut­zen: „cert­bot renew –stan­da­lo­ne –pre-hook „ser­vice nginx stop” –post-hook „ser­vice nginx start””.

Bei Bedarf auch ein eige­nen cron­job dafür anle­gen (alle zwei Mona­te oder so soll­te genü­gen). Den alten Cron­job von cert­bot („/etc/cron.d/certbot”) wür­de ich mei­ner Mei­nung nach löschen.