Modul 7 · 7.3
https s Let's Encryptom
Modul 7: Domena, web-poslužitelj i https · Vrijeme čitanja: 12 minuta
Cilj učenja: Nakon ove lekcije moći ćete s certbotom zatražiti besplatni certifikat od Let's Encrypta za nginx, preusmjeriti http na https, provjeriti automatsko obnavljanje i riješiti najčešće pogreške pri zahtjevu.
Ključni pojmovi: certifikat, izdavatelj certifikata (CA), ACME, Let's Encrypt, provjera domene, HTTP-01, DNS-01, TLS-ALPN-01, certbot, obnavljanje, certbot renew --dry-run, rok valjanosti, ARI, ograničenja broja zahtjeva (rate limits), staging, CAA, preusmjeravanje na https
Zašto https i što certifikat dokazuje
Bez https-a sve između preglednika i poslužitelja putuje mrežom nešifrirano: lozinke, obrasci, kolačići. Svatko na putu (javni wifi, hakirani usmjerivač) može to čitati ili nešto promijeniti. Preglednici zato http stranice označavaju kao "nije sigurno", a neke funkcije rade samo preko https-a. Za trezor poput Vaultwardena (lekcija 9.4) https je čak obavezan.
https koristi TLS, a za to Vaš poslužitelj treba certifikat: dokaz, potpisan od izdavatelja certifikata (CA) kojemu preglednici vjeruju, da ovaj ključ pripada ovom nazivu. Običan certifikat dokazuje samo da podnositelj zahtjeva upravlja nazivom domene (provjera domene). On ne govori ništa o tome tko ste ni jeste li pouzdani.
Let's Encrypt je besplatni CA koji izdaje samo certifikate s provjerom domene, potpuno automatski putem protokola ACME. Program na Vašem poslužitelju (ACME klijent) zatraži certifikat, dokaže da upravlja nazivom, instalira ga i na vrijeme obnovi. Ova lekcija koristi certbot, klijent organizacije EFF. Caddy (lekcija 7.4) ima ugrađen ACME klijent.
Kako dokazujete da upravljate nazivom?
Let's Encrypt poznaje tri vrste izazova (challenges):
| Izazov | Kako | Priključak | Wildcard (*.example.com) |
|---|---|---|---|
| HTTP-01 | postavljanje datoteke pod http://<naam>/.well-known/acme-challenge/ | 80 | ne |
| DNS-01 | postavljanje TXT zapisa _acme-challenge.<naam> | nijedan | da |
| TLS-ALPN-01 | prikazivanje posebnog certifikata tijekom TLS rukovanja (handshake) | 443 | ne |
Za običan VPS s web-stranicom HTTP-01 je najjednostavniji. Za to mora vrijediti sljedeće:
- naziv putem zapisa A (i AAAA) pokazuje na Vaš poslužitelj (lekcija 7.1);
- priključak 80 je otvoren za cijeli svijet, čak i ako Vaša stranica inače koristi samo https. Let's Encrypt provjerava samo preko priključka 80 i s više mjesta na internetu; te adrese ne možete unijeti u vatrozid;
- Vaš poslužitelj preko IPv4 i IPv6 daje isti odgovor. Ako naziv ima AAAA zapis, Let's Encrypt najprije pokušava preko IPv6. Tek ako IPv6 uopće ne uspostavi vezu, vraća se na IPv4.
DNS-01 Vam je potreban za wildcard certifikat ili ako poslužitelj nije dostupan izvana. Tada ACME klijent mora moći mijenjati Vaš DNS, obično pomoću API ključa Vašeg DNS pružatelja. Taj ključ može promijeniti cijeli Vaš DNS: čuvajte ga jednako pažljivo kao lozinku.
Instalacija certbota
Autori certbota preporučuju snap, jer on uvijek ima najnoviju verziju. Na Debianu i Ubuntuu može se instalirati i jednostavno iz repozitorija paketa:
anna@web1:~$ sudo apt install certbot python3-certbot-nginxVerzija iz distribucije je starija, ali dobiva sigurnosna ažuriranja putem apt-a (lekcije 4.1 i 4.2), što se uklapa u ostatak ovog tečaja. Odaberite jedno od to dvoje, ne oboje: dvije instalacije međusobno si smetaju pri obnavljanju.
Zahtjev za certifikat
Uz stranicu iz lekcije 7.2 koja već radi na priključku 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(Datum i pojedinosti su primjer.) Dodatak --nginx radi tri stvari: privremeno priprema izazov, preuzima certifikat i prilagođava Vaš server block dodavanjem bloka listen 443 ssl i preusmjeravanja s http na https. Ako to radije želite učiniti sami, upotrijebite certbot certonly --nginx i sami unesite retke u svoju konfiguraciju.
Nekoliko stvari na koje treba paziti:
- Zatražite odjednom sve nazive koji pripadaju stranici (
-dza svaki naziv). Svaki naziv mora pokazivati na poslužitelj, inače cijeli zahtjev ne uspijeva. - Privatni ključ (
privkey.pem) nalazi se u/etc/letsencrypt/live/i može ga čitati samo root. Ne kopirajte ga na druga mjesta i nikada ga ne stavljajte u sigurnosnu kopiju koju drugi mogu čitati. - Adresa e-pošte nije obavezna. Let's Encrypt od lipnja 2025. više ne šalje poruke kada certifikat uskoro istječe. Zato sami morate nadzirati uspijeva li obnavljanje (lekcija 8.3).
Preusmjeravanje s http na https
Nakon certbota Vaša konfiguracija izgleda otprilike ovako (pročišćeno; certbot sam dodaje komentare # managed by Certbot i ponekad retke 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;
...
}Prvi blok sve preko http-a preusmjerava na isti naziv i istu putanju preko https-a, trajnim preusmjeravanjem (301). Datoteka izazova za obnavljanje i dalje radi: Let's Encrypt slijedi to preusmjeravanje. Drugi blok je prava stranica. Ako želite i www preusmjeriti na goli naziv (ili obrnuto), učinite to u zasebnom bloku, tako da posjetitelji vide jedan stalni naziv.
Obnavljanje: automatski, uz provjeru
Certifikat od Let's Encrypta sada vrijedi 90 dana. To će se skratiti: Let's Encrypt je najavio da će standardni profil od 10. veljače 2027. izdavati certifikate od 64 dana, a od 16. veljače 2028. od 45 dana. Ručno obnavljanje stoga nije opcija; mora se odvijati automatski.
certbot pri instalaciji postavlja systemd timer (ili cron redak) koji dvaput dnevno provjerava treba li neki certifikat obnoviti. Provjerite postoji li on i testirajte obnavljanje probnim zahtjevom:
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)Nakon obnavljanja nginx mora učitati i novi certifikat. S dodatkom za nginx certbot to sam rješava; ako koristite certonly, postavite deploy hook koji ponovno učitava nginx, na primjer izvršnu skriptu u /etc/letsencrypt/renewal-hooks/deploy/ s systemctl reload nginx.
Dobri ACME klijenti koriste ARI (ACME Renewal Information): Let's Encrypt tada sam kaže kada treba obnoviti certifikat, na primjer ranije ako nešto nije u redu s nizom certifikata. Zato redovito ažurirajte svoj klijent.
Kada zahtjev ne uspije
| Poruka (skraćeno) | Uzrok | Rješenje |
|---|---|---|
Timeout during connect (likely firewall problem) | priključak 80 je zatvoren ili naziv pokazuje na drugu adresu | vatrozid (lekcija 5.2), A/AAAA (lekcija 7.1) |
Invalid response from http://.../.well-known/acme-challenge/...: 404 | odgovara drugi poslužitelj ili drugi server block, često preko IPv6 | listen [::]:80, provjerite AAAA zapis |
CAA record for example.com prevents issuance | CAA zapis dopušta samo drugog izdavatelja | prilagodite CAA (lekcija 7.1) |
too many certificates already issued | dosegnuto ograničenje broja zahtjeva (rate limit) | pričekajte; testirajte sa stagingom |
Let's Encrypt ima ograničenja broja zahtjeva (rate limits) kako bi spriječio zlouporabu. Najvažnija su: najviše 50 novih certifikata po registriranoj domeni u 7 dana, najviše 5 certifikata za potpuno isti skup naziva u 7 dana i najviše 5 neuspjelih provjera po nazivu na sat. Tko eksperimentira i stalno iznova šalje zahtjev, brzo će ih dosegnuti. Zato testirajte u okruženju staging, koje ima mnogo šire granice, ali izdaje certifikate kojima preglednici ne vjeruju:
anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.comAko tamo radi, zatražite pravi certifikat.
Na AlmaLinuxu i Rocky Linuxu
certbot se ondje instalira iz EPEL-a (dnf install certbot python3-certbot-nginx) ili kao snap. Dodatak i naredbe su isti. Imajte na umu firewalld (--add-service=http --add-service=https) i SELinux ako se certifikati nalaze na neuobičajenom mjestu.
U praksi
Kod paketa web-hostinga certifikat za Vas rješava upravljačka ploča (kod WebOké i kod drugih hosting tvrtki s DirectAdminom, cPanelom ili Pleskom). Na VPS-u to radite sami, s certbotom, Caddyjem ili ACME klijentom koji dolazi uz Vaš softver. To vrijedi kod svakog pružatelja.
Sažetak
- Certifikat od Let's Encrypta dokazuje da upravljate nazivom; certbot ga putem ACME-a zatraži, instalira i obnavlja.
- HTTP-01 zahtijeva priključak 80 otvoren za sve i isti odgovor preko IPv4 i IPv6; DNS-01 služi za wildcard certifikate.
certbot --nginx -d ... -d ...rješava certifikat i preusmjeravanje na https; zatražite odjednom sve nazive jedne stranice.- Certifikati sada vrijede 90 dana i postat će kraći; provjerite timer i
certbot renew --dry-runte sami nadzirite datum isteka. - Testirajte s
--stagingkako biste izbjegli ograničenja broja zahtjeva; pazite na CAA.
Kviz
Zadatak
Zadatak Z7.3: https s valjanim certifikatom. Zatražite certifikat za svoju stranicu (s certbotom ili Caddyjem), preusmjerite http na https i testirajte obnavljanje s certbot renew --dry-run (kod Caddyja: u zapisima provjerite je li certifikat preuzet). Unesite naziv svoje stranice. Program uspostavlja TLS vezu na priključak 443 i provjerava je li certifikat valjan, je li ga potpisao pouzdani izdavatelj i pokriva li Vaš naziv, a zatim zatraži http://<naam>/ kako bi vidio preusmjeravate li na https. Osim toga unosite kada Vaš certifikat istječe i kako je kod Vas riješeno obnavljanje.
Dodatno štivo
- Aktiviranje, obnavljanje i rješavanje problema sa SSL certifikatom
- Besplatni DNS tečaj 5.2: CAA: tko smije izdavati certifikate?
- 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
- Upute za Certbot (nginx): https://certbot.eff.org/instructions?ws=nginx&os=snap
