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 ~ /\. s deny 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.