Let’s Encrypt vydává certifikáty na devadesát dní a obnovuje je automaticky, a proto se na ně týden po nastavení přestane myslet. Potíž je v tom, že se automatická obnova rozbíjí tiše: chyby nikdo nevidí a o tři měsíce později vítá návštěvníky varování prohlížeče. Od roku 2025 Let’s Encrypt už neposílá upozornění na vypršení, takže zmizela i poslední vnější připomínka.
Níže jsou důvody, proč obnova přestává fungovat, v sestupném pořadí podle četnosti.
1. Certifikát obnoven, ale služba ho nenačetla
Nejčastější. certbot renew proběhl, nový soubor leží na disku, ale nginx nebo Apache dál drží v paměti starý — a vydávají ho návštěvníkům až do znovunačtení konfigurace. Formálně je vše v pořádku, fakticky má web vypršelý certifikát.
Léčí to hook spouštěný po úspěšné obnově:
sudo certbot renew --deploy-hook "systemctl reload nginx"
Zapíše se jednou do souboru obnovy (/etc/letsencrypt/renewal/example.com.conf, sekce [renewalparams], řádek renew_hook) a dál funguje samo.
2. Změnil se webový server, ale ověření zůstalo
Ověření HTTP-01 vyžaduje, aby se soubor z /.well-known/acme-challenge/ vydával běžným HTTP. Rozbíjí se to obvykle takto:
- do konfigurace bylo přidáno bezpodmínečné přesměrování z HTTP na HTTPS — ověření spadne do přesměrování a neprojde;
- objevilo se pravidlo
location ~ /\.sdeny all, které zavírá všechny adresáře s tečkou, včetně.well-known; - změnil se kořenový adresář webu, zatímco v nastavení certbotu zůstal starý
--webroot-path; - bylo zapnuto blokování podle zemí nebo základní autentizace, pod kterou spadl i ověřovací server.
Správné pořadí v konfiguraci: nejdřív samostatný location pro /.well-known/acme-challenge/ a teprve potom obecné přesměrování.
3. Časovač je vypnutý
Obnovu spouští časovač systemd nebo úloha cronu a obojí lze omylem vypnout při ladění nebo ztratit při stěhování serveru.
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Druhý příkaz provede celý cyklus obnovy ve zkušebním režimu, aniž by čerpal limity. Je to jediná kontrola, která odpovídá na otázku „obnoví se to za měsíc“ s předstihem, a ne po faktu.
4. Doména už sem nesměřuje
Certifikát pokrývá pět domén, jedna z nich se přestěhovala na jiný hosting, DNS se změnil. Ověření této domény přestane procházet a certbot neobnoví celý certifikát — spolu se čtyřmi funkčními doménami. Zbytečné domény je třeba z certifikátu odstranit, ne hlášku ignorovat.
5. Byly dosaženy limity
Let’s Encrypt omezuje počet certifikátů na doménu za týden. Obvykle je to důsledek smyčky „nevyšlo to, zkusím znovu“ při ladění. K pokusům existuje testovací server (--dry-run nebo --test-cert) a používat ho je třeba dřív, než se limit vyčerpá, ne potom.
Kontrolovat to, co se vydává
Každá kontrola podle souborů má jeden nedostatek: soubor může být čerstvý, a návštěvník přesto dostane starý certifikát. Dívat se je třeba ze strany klienta:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates -subject -issuer
Volba -servername je povinná: bez ní na serveru s několika weby dostanete certifikát prvního virtuálního hostu, a ne toho, o který šlo. Ve výstupu je notAfter skutečné datum vypršení.
Při té příležitosti zkontrolujte řetěz:
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | grep -c 'BEGIN CERTIFICATE'
Je-li certifikát jeden, mezilehlý se nevydává. Prohlížeče takovou konfiguraci obvykle odpustí — řetěz si dovřou samy — zatímco curl, mobilní aplikace a klienti v Javě vyhodí chybu ověření. To je klasické „u mě se všechno otevírá, u zákazníka to nefunguje“.
Na kolik dní varovat
Třicet dní je rozumný první práh: přesně tolik zbývá do vypršení ve chvíli, kdy certbot začíná pokusy o obnovu, takže pokud se do té doby nic nestalo, mechanismus je rozbitý. Čtrnáct dní je druhý signál a vyžaduje jednat už dnes. Sedm je nouzový.
Důležité je hlídat všechny certifikáty najednou, i ty mimo Let’s Encrypt: koupené na rok se zapomínají nejspolehlivěji, protože za rok všichni zapomenou i na ně, i na to, na čí poštu chodí upozornění. Jedna stránka se seznamem domén, daty a zbývajícím počtem dní věc uzavírá úplně — jako v ukázce níže.