Modul 7 · 7.3
https s Let's Encrypt
Modul 7: Doména, webový server a https · Čas čítania: 12 minút
Cieľ lekcie: Po tejto lekcii dokážete pomocou certbotu požiadať o bezplatný certifikát od Let's Encrypt pre nginx, presmerovať http na https, skontrolovať automatické obnovovanie a vyriešiť najčastejšie chyby pri žiadosti.
Kľúčové pojmy: certifikát, certifikačná autorita (CA), ACME, Let's Encrypt, overenie domény, HTTP-01, DNS-01, TLS-ALPN-01, certbot, obnovovanie, certbot renew --dry-run, doba platnosti, ARI, rate limits, staging, CAA, presmerovanie na https
Prečo https a čo certifikát dokazuje
Bez https ide všetko medzi prehliadačom a serverom po sieti nešifrovane: heslá, formuláre, cookies. Ktokoľvek po ceste (verejná wifi, napadnutý router) môže obsah čítať alebo meniť. Prehliadače preto označujú http stránky ako "nezabezpečené" a niektoré funkcie fungujú iba cez https. Pre trezor ako Vaultwarden (lekcia 9.4) je https dokonca povinné.
https používa TLS a na to potrebuje váš server certifikát: doklad podpísaný certifikačnou autoritou (CA), ktorej prehliadače dôverujú, že tento kľúč patrí k tomuto názvu. Bežný certifikát dokazuje iba to, že žiadateľ spravuje názov domény (overenie domény). Nehovorí nič o tom, kto ste, ani o tom, či ste dôveryhodní.
Let's Encrypt je bezplatná CA, ktorá vydáva iba certifikáty s overením domény, úplne automaticky cez protokol ACME. Program na vašom serveri (klient ACME) o certifikát požiada, preukáže, že názov spravuje, nainštaluje ho a včas ho obnoví. Táto lekcia používa certbot, klienta od EFF. Caddy (lekcia 7.4) má klienta ACME zabudovaného.
Ako preukázať, že názov spravujete?
Let's Encrypt pozná tri druhy výziev (challenges):
| Výzva | Ako | Port | Wildcard (*.example.com) |
|---|---|---|---|
| HTTP-01 | umiestniť súbor pod http://<naam>/.well-known/acme-challenge/ | 80 | nie |
| DNS-01 | nastaviť TXT záznam _acme-challenge.<naam> | žiadny | áno |
| TLS-ALPN-01 | zobraziť špeciálny certifikát počas TLS handshake | 443 | nie |
Pre bežný VPS s webovou stránkou je najjednoduchšia výzva HTTP-01. Na ňu je potrebné, aby:
- názov smeroval záznamom A (a AAAA) na váš server (lekcia 7.1);
- bol port 80 otvorený pre celý svet, aj keď vaša stránka inak používa iba https. Let's Encrypt overuje iba cez port 80 a z viacerých miest na internete; tieto adresy si do firewallu povoliť nemôžete;
- váš server odpovedal cez IPv4 aj IPv6 rovnako. Ak má názov záznam AAAA, Let's Encrypt najprv skúša IPv6. Iba ak cez IPv6 nevznikne vôbec žiadne spojenie, prejde späť na IPv4.
DNS-01 potrebujete pre wildcard certifikát alebo vtedy, keď server nie je dostupný zvonku. Klient ACME potom musí vedieť upravovať vaše DNS, väčšinou cez API kľúč od vášho poskytovateľa DNS. Tento kľúč môže zmeniť celé vaše DNS: uchovávajte ho rovnako starostlivo ako heslo.
Inštalácia certbotu
Autori certbotu odporúčajú snap, pretože má vždy najnovšiu verziu. Na Debiane a Ubuntu ho môžete nainštalovať aj priamo z repozitára balíkov:
anna@web1:~$ sudo apt install certbot python3-certbot-nginxVerzia z distribúcie je staršia, ale dostáva bezpečnostné aktualizácie cez apt (lekcie 4.1 a 4.2), a to zodpovedá zvyšku tohto kurzu. Vyberte si jednu z dvoch možností, nie obe: dve inštalácie si pri obnovovaní navzájom prekážajú.
Žiadosť o certifikát
So stránkou z lekcie 7.2, ktorá už funguje na porte 80:
anna@web1:~$ sudo certbot --nginx -d example.com -d www.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address or hit Enter to skip.
(Enter 'c' to cancel):
...
Requesting a certificate for example.com and www.example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2027-02-07.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/sites-enabled/example.com
Successfully deployed certificate for www.example.com to /etc/nginx/sites-enabled/example.com
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com(Dátum a podrobnosti sú len príklad.) Plug-in --nginx urobí tri veci: dočasne pripraví výzvu, stiahne certifikát a upraví váš server block o blok listen 443 ssl a presmerovanie z http na https. Ak to chcete urobiť radšej sami, použite certbot certonly --nginx a riadky doplňte do konfigurácie sami.
Na niekoľko vecí si dajte pozor:
- Požiadajte naraz o všetky názvy, ktoré k stránke patria (
-dpre každý názov). Každý názov musí smerovať na server, inak zlyhá celá žiadosť. - Súkromný kľúč (
privkey.pem) je uložený v/etc/letsencrypt/live/a môže ho čítať iba root. Nekopírujte ho na iné miesta a nikdy ho nedávajte do zálohy, ktorú môžu čítať iní. - E-mailová adresa je nepovinná. Let's Encrypt od júna 2025 neposiela e-maily, keď certifikát čoskoro vyprší. Úspešné obnovovanie preto musíte strážiť sami (lekcia 8.3).
Presmerovanie http na https
Po spustení certbotu vyzerá vaša konfigurácia približne takto (upravené; certbot sám pridáva komentáre # managed by Certbot a niekedy riadky if):
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
root /var/www/example.com;
...
}Prvý blok presmeruje všetko z http na rovnaký názov a rovnakú cestu cez https, s trvalým presmerovaním (301). Súbor výzvy pre obnovovanie stále funguje: Let's Encrypt toto presmerovanie nasleduje. Druhý blok je samotná stránka. Ak chcete navyše presmerovať www na holý názov (alebo naopak), urobte to vo vlastnom bloku, aby návštevníci videli jeden stály názov.
Obnovovanie: automaticky a s kontrolou
Certifikát od Let's Encrypt je v súčasnosti platný 90 dní. Táto doba sa skráti: Let's Encrypt oznámil, že štandardný profil bude od 10. februára 2027 vydávať certifikáty na 64 dní a od 16. februára 2028 na 45 dní. Ručné obnovovanie preto neprichádza do úvahy; musí prebiehať automaticky.
certbot pri inštalácii vytvorí systemd časovač (alebo riadok cronu), ktorý dvakrát denne kontroluje, či treba niektorý certifikát obnoviť. Overte, že tam je, a obnovovanie otestujte skúšobnou žiadosťou:
anna@web1:~$ systemctl list-timers 'certbot*'
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2026-11-09 22:41:00 CET 9h left - - certbot.timer certbot.service
anna@web1:~$ sudo certbot renew --dry-run
...
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/example.com/fullchain.pem (success)Po obnovení musí nginx nový certifikát aj načítať. S plug-inom pre nginx to certbot zariadi sám; ak používate certonly, nastavte deploy hook, ktorý nginx znova načíta, napríklad spustiteľný skript v /etc/letsencrypt/renewal-hooks/deploy/ s systemctl reload nginx.
Dobrí klienti ACME používajú ARI (ACME Renewal Information): Let's Encrypt potom sám určí, kedy treba certifikát obnoviť, napríklad skôr, ak je problém so sériou certifikátov. Preto udržiavajte svojho klienta aktuálneho.
Keď žiadosť zlyhá
| Hlásenie (skrátené) | Príčina | Riešenie |
|---|---|---|
Timeout during connect (likely firewall problem) | port 80 je zatvorený alebo názov smeruje na inú adresu | firewall (lekcia 5.2), A/AAAA (lekcia 7.1) |
Invalid response from http://.../.well-known/acme-challenge/...: 404 | odpovedá iný server alebo iný server block, často cez IPv6 | listen [::]:80, skontrolovať záznam AAAA |
CAA record for example.com prevents issuance | záznam CAA povoľuje iba inú certifikačnú autoritu | upraviť CAA (lekcia 7.1) |
too many certificates already issued | rate limit (limit počtu žiadostí) | počkať; testovať so stagingom |
Let's Encrypt má rate limits, ktoré bránia zneužitiu. Najdôležitejšie: najviac 50 nových certifikátov na registrovanú doménu za 7 dní, najviac 5 certifikátov pre presne tú istú sadu názvov za 7 dní a najviac 5 neúspešných overení na názov za hodinu. Kto skúša a žiada stále znova, na tieto limity rýchlo narazí. Preto testujte v prostredí staging, ktoré má oveľa voľnejšie limity, ale vydáva certifikáty, ktorým prehliadače nedôverujú:
anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.comAk to tam funguje, požiadajte o skutočný certifikát.
Na AlmaLinux a Rocky Linux
certbot tam získate z EPEL (dnf install certbot python3-certbot-nginx) alebo ako snap. Plug-in a príkazy sú rovnaké. Myslite na firewalld (--add-service=http --add-service=https) a na SELinux, ak sú certifikáty uložené na nezvyčajnom mieste.
V praxi
Pri hostingovom balíku zariadi certifikát za vás panel (vo WebOké aj u iných hostingových spoločností s DirectAdmin, cPanel alebo Plesk). Na VPS to robíte sami, pomocou certbotu, Caddy alebo klienta ACME, ktorý patrí k vášmu softvéru. To platí u každého poskytovateľa.
Zhrnutie
- Certifikát od Let's Encrypt dokazuje, že názov spravujete; certbot oň cez ACME požiada, nainštaluje ho a obnovuje.
- HTTP-01 potrebuje port 80 otvorený pre všetkých a rovnakú odpoveď cez IPv4 aj IPv6; DNS-01 slúži pre wildcardy.
certbot --nginx -d ... -d ...zariadi certifikát aj presmerovanie na https; o všetky názvy stránky požiadajte naraz.- Certifikáty sú teraz platné 90 dní a ich platnosť sa skracuje; kontrolujte časovač a
certbot renew --dry-runa dátum vypršania strážte sami. - Testujte s
--staging, aby ste sa vyhli rate limits; dávajte pozor na CAA.
Kvíz
Úloha
Úloha Z7.3: https s platným certifikátom. Požiadajte pre svoju stránku o certifikát (pomocou certbotu alebo Caddy), presmerujte http na https a obnovovanie otestujte pomocou certbot renew --dry-run (pri Caddy: v logoch overte, že sa certifikát stiahol). Zadajte názov svojej stránky. Program vytvorí TLS spojenie na port 443 a overí, či je certifikát platný, podpísaný dôveryhodnou certifikačnou autoritou a pokrýva váš názov, a potom si vyžiada http://<naam>/, aby zistil, či presmerúvate na https. Okrem toho uvediete, kedy váš certifikát vyprší a ako máte obnovovanie zariadené.
Ďalšie čítanie
- Aktivácia a obnovenie SSL certifikátu, riešenie problémov
- Bezplatný DNS kurz 5.2: CAA: kto smie vydávať certifikáty?
- Let's Encrypt, Challenge Types: https://letsencrypt.org/docs/challenge-types/
- Let's Encrypt, Rate Limits: https://letsencrypt.org/docs/rate-limits/
- Let's Encrypt, Decreasing Certificate Lifetimes to 45 Days: https://letsencrypt.org/2025/12/02/from-90-to-45
- Návod pre Certbot (nginx): https://certbot.eff.org/instructions?ws=nginx&os=snap
