Let's Encrypt je besplatan, automatiziran i odličan — dok ne udarite u rate limit. Kad se to dogodi, certbot baca too many certificates i imate 168 sati dok se limit ne oslobodi. Ova uputa objašnjava koji limiti postoje, kako ih ne udariti, i što napraviti kad vas je već zaključalo.
1. Bitni rate limiti (2026. verzija)
Glavni limiti Let's Encrypt-a:
- Certificates per Registered Domain: 50 certifikata tjedno po registriranoj domeni (vasadomena.hr uključuje sve subdomene). Najčešći udarac za hostere i multitenant aplikacije.
- Duplicate Certificate: 5 identičnih certifikata tjedno. Ako obnavljate isti set hostname-ova više puta, dignut će rate limit.
- Failed Validations: 5 neuspjelih validacija po accountu, hostname-u, sat vremena. Blokiranje nakon 5 pokušaja u istoj varijanti.
- Pending Authorizations: 300 po accountu u isto vrijeme — problem pri masovnom izdavanju.
- New Orders: 300 novih ordera po accountu u 3 sata.
- Names per Certificate: 100 hostname-ova po certifikatu (SAN).
Svi limiti resetiraju se "sliding window" — ne svake nedjelje u ponoć, nego 168 sati nakon svakog pojedinog izdavanja.
2. Najčešći uzroci udaranja limita
- Agresivni renewal u skripti. Cron koji pokreće
certbot renewsvaki sat i svaki put zove--force-renewal. Pet dana i limit je gotov. - Migracija s više subdomena. 30 subdomena × 2 pokušaja × failed challenge = rate limit u 2h.
- Dev / staging / production razdvojeni. Staging ponovno izdaje certifikat za istu domenu na svaki deploy — lako pređe 5 duplikata tjedno.
- Hosteri sa stotinama klijentskih domena na istoj root domeni (wildcard SaaS).
- Misskonfigurirani DNS-01 challenge. Propagacija sporija nego timeout → fail → retry → fail.
3. Kako ne udariti limit
Koristi staging environment Let's Encrypta
Za testiranje, obavezno certbot flag --staging. Staging ne broji u rate limit.
certbot certonly --staging --webroot -w /var/www/html -d test.vasadomena.hr
Kad radi u stagingu, ponovite bez --staging za produkcijski certifikat.
Ne koristi --force-renewal rutinski
Certbot automatski obnavlja samo kad je certifikat <30 dana od isteka. --force-renewal zaobilazi tu zaštitu i svaki puta izda novi certifikat.
Grupiraj hostname-ove u jedan certifikat
Umjesto 10 zasebnih certifikata za 10 subdomena, jedan SAN certifikat s 10 imena. Računa se kao 1 certifikat, ne 10:
certbot certonly --webroot -w /var/www/html \
-d vasadomena.hr \
-d www.vasadomena.hr \
-d api.vasadomena.hr \
-d admin.vasadomena.hr
Koristi wildcard certifikat za mnogo subdomena
Wildcard (*.vasadomena.hr) zahtijeva DNS-01 challenge (ne HTTP-01), ali pokriva neograničeno subdomena:
certbot certonly --manual --preferred-challenges dns \
-d vasadomena.hr -d "*.vasadomena.hr"
Još bolje — automatizirano preko DNS provider plugina (Cloudflare, Route53, Bunny DNS):
certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
-d vasadomena.hr -d "*.vasadomena.hr"
Shared certifikat između staging i prod
Ako staging nema svoju poddomenu, koristite istu domenu s DNS split-om. Ili koristite interno wildcard certifikat.
4. Monitoring certifikata
Ne čekajte da istekne. Postavite alarm.
# provjera dana do isteka
echo | openssl s_client -connect vasadomena.hr:443 -servername vasadomena.hr 2>/dev/null \
| openssl x509 -noout -dates
# skripta alarma
#!/bin/bash
DOMAIN=vasadomena.hr
EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_TS=$(date -d "$EXPIRY" +%s)
NOW_TS=$(date +%s)
DAYS=$(( (EXPIRY_TS - NOW_TS) / 86400 ))
if [ $DAYS -lt 14 ]; then
echo "SSL cert za $DOMAIN istječe za $DAYS dana" | mail -s "SSL alarm" admin@vasadomena.hr
fi
Pokrećite kroz cron svakog dana.
5. Kad ste udarili u rate limit
Prvo: provjerite je li stvarno limit
Greška mora sadržavati točno:
Error creating new cert :: too many certificates already issued for: vasadomena.hr
see https://letsencrypt.org/docs/rate-limits/
Ako je druga greška (authorization problem, DNS problem) — limit nije problem, problem je setup.
Strategije dok limit ne padne
- Postojeći certifikat još vrijedi. Ako je još validan, ne ide u down — samo čekate 168h od zadnjeg issue.
- ZeroSSL kao privremeni alternativa. ACME kompatibilan, certbot plugin
--serverflag:certbot --server https://acme.zerossl.com/v2/DV90 \ --eab-kid YOUR_KID --eab-hmac-key YOUR_KEY \ -d vasadomena.hr - Cloudflare Origin Certificate. Ako imate Cloudflare ispred, origin cert vrijedi 15 godina i ne troši LE limit.
- Google Trust Services besplatni ACME — slični limiti, ali odvojena potrošnja.
Zahtjev za povećanje limita
Ako je vaš projekt SaaS s mnogo korisničkih domena, Let's Encrypt ima rate limit adjustment request formu. Obrazlaganje mora biti tehničko (broj domena, automatizacija, zašto je duplikat nepotreban).
6. Preporuke za različite scenarije
Jedna domena s 5-10 subdomena
SAN certifikat s eksplicitnim popisom imena. Jednostavno, sigurno.
Domena s mnogo subdomena (glavni brand)
Wildcard + SAN certifikat preko DNS-01 challenge.
Multi-tenant SaaS (custom domene klijenata)
Certbot automation + dedicated ACME account(i) + Cloudflare for SaaS ili ZeroSSL. Nikad ne koristi jedan Let's Encrypt account za sve.
Hosting provider
AutoSSL (cPanel) preko Comodo/Sectigo ili kombinacija — ne stavljajte stotine klijenata na istu LE account bez razdvajanja.
7. Check-list prije produkcije
- Staging test prošao (
--staging). - Certifikat izdat s minimumom nužnih imena (bez testnih subdomena koje nećete koristiti).
- Renewal cron radi bez
--force-renewal. - Monitoring isteka aktiviran.
- Fallback strategija (Cloudflare Origin, ZeroSSL) poznata tima.
Za klijente s kompleksnim SSL scenarijima (mnogo domena, wildcard, mTLS) obično postavljamo ACME automatizaciju kombinirano s CF Origin certifikatima kako Let's Encrypt rate limit nikad ne postane problem. Javite se ako imate multi-domain projekt u planu.