Let’s Encrypt udsteder certifikater på halvfems dage og fornyer dem automatisk, og derfor holder man op med at tænke på dem en uge efter opsætningen. Problemet er, at den automatiske fornyelse går stille i stykker: ingen ser fejlene, og tre måneder senere mødes besøgende af en advarsel i browseren. Siden 2025 sender Let’s Encrypt ikke længere påmindelser om udløb, så den sidste ydre påmindelse er også væk.
Nedenfor følger grundene til, at fornyelsen holder op med at virke, i faldende rækkefølge efter, hvor almindelige de er.
1. Certifikatet er fornyet, men tjenesten indlæste det ikke
Det hyppigste. certbot renew gik igennem, den nye fil ligger på disken, men nginx eller Apache holder stadig den gamle i hukommelsen — og leverer den til besøgende, indtil konfigurationen genindlæses. Formelt er alt i orden, i praksis har hjemmesiden et udløbet certifikat.
Det afhjælpes med en hook, der køres efter en vellykket fornyelse:
sudo certbot renew --deploy-hook "systemctl reload nginx"
Det skrives ind én gang i fornyelsesfilen (/etc/letsencrypt/renewal/example.com.conf, sektionen [renewalparams], linjen renew_hook) og virker derefter af sig selv.
2. Webserveren blev ændret, men valideringen blev stående
HTTP-01-validering kræver, at filen under /.well-known/acme-challenge/ leveres over almindelig HTTP. Det går som regel i stykker sådan:
- en betingelsesløs omdirigering fra HTTP til HTTPS blev tilføjet i konfigurationen — valideringen havner i omdirigeringen og går ikke igennem;
- en regel
location ~ /\.meddeny alldukkede op og lukker alle mapper med punktum, herunder.well-known; - hjemmesidens rodmappe blev ændret, mens certbots indstillinger har den gamle
--webroot-path; - landeblokering eller basisgodkendelse blev slået til og ramte også valideringsserveren.
Rigtig rækkefølge i konfigurationen: først en separat location til /.well-known/acme-challenge/, og først derefter den generelle omdirigering.
3. Timeren er slået fra
Fornyelsen startes af en systemd-timer eller et cron-job, og begge kan slås fra ved et uheld under fejlsøgning eller mistes ved en serverflytning.
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Den anden kommando kører hele fornyelsescyklussen i prøvetilstand uden at bruge af kvoterne. Det er den eneste kontrol, der svarer på spørgsmålet »bliver den fornyet om en måned« på forhånd og ikke bagefter.
4. Domænet peger ikke hertil længere
Certifikatet omfatter fem domæner, et af dem er flyttet til en anden hosting, og DNS er ændret. Valideringen af det domæne holder op med at gå igennem, og certbot fornyer ikke hele certifikatet — sammen med de fire fungerende domæner. Overflødige domæner skal fjernes fra certifikatet, ikke ignoreres.
5. Kvoterne er nået
Let’s Encrypt begrænser antallet af certifikater per domæne per uge. Det skyldes som regel løkken »det gik ikke, jeg prøver igen« under fejlsøgning. Til eksperimenter findes en testserver (--dry-run eller --test-cert), og den skal bruges, før kvoten er opbrugt, ikke bagefter.
Kontrollér det, der leveres
Enhver kontrol, der tager udgangspunkt i filer, har én svaghed: filen kan være frisk, mens besøgende alligevel får det gamle certifikat. Man må se fra klientens side:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer
Flaget -servername er obligatorisk: uden det får du på en server med flere hjemmesider certifikatet til den første den bedste virtuelle vært og ikke det, du spurgte om. I outputtet er notAfter den virkelige udløbsdato.
Benyt samtidig lejligheden til at kontrollere kæden:
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | grep -c 'BEGIN CERTIFICATE'
Er certifikatet ét enkelt, leveres mellemcertifikatet ikke. Browsere plejer at tilgive den opsætning — de slutter kæden selv — mens curl, mobilapps og Java-klienter kaster en valideringsfejl. Det er det klassiske »hos mig åbnes alt, hos kunden virker det ikke«.
Hvor mange dage i forvejen man skal advare
Tredive dage er en fornuftig første tærskel: præcis så lang tid er der tilbage, når certbot begynder sine fornyelsesforsøg, så er der ikke sket noget inden da, er mekanismen i stykker. Fjorten dage er det andet signal og kræver handling allerede i dag. Syv er nødsituation.
Det vigtige er at holde styr på alle certifikater samtidig, også dem der ikke kommer fra Let’s Encrypt: de, der er købt for et år, glemmes sikrest af alle, da alle i løbet af et år når at glemme både dem og hvis adresse påmindelserne går til. Én side med domæneliste, datoer og antal dage tilbage lukker sagen helt — som i demonstrationen nedenfor.