Modul 7 · 7.3
https z Let's Encrypt
Modul 7: Domena, spletni strežnik in https · Čas branja: 12 minut
Učni cilj: Po tej lekciji boste znali s certbot pridobiti brezplačen certifikat Let's Encrypt za nginx, preusmeriti http na https, preveriti samodejno obnavljanje in odpraviti najpogostejše napake pri pridobivanju certifikata.
Ključni pojmi: certifikat, izdajatelj certifikatov (CA), ACME, Let's Encrypt, preverjanje domene, HTTP-01, DNS-01, TLS-ALPN-01, certbot, obnavljanje, certbot renew --dry-run, veljavnost, ARI, omejitve (rate limits), staging, CAA, preusmeritev na https
Zakaj https in kaj certifikat dokazuje
Brez https gre vse med brskalnikom in strežnikom po omrežju nešifrirano: gesla, obrazci, piškotki. Kdorkoli na poti (javni wifi, vdrt usmerjevalnik) lahko to bere ali kaj spremeni. Brskalniki zato strani http označijo kot "ni varno", nekatere funkcije pa delujejo samo prek https. Za trezor gesel, kot je Vaultwarden (lekcija 9.4), je https celo obvezen.
https uporablja TLS, za to pa Vaš strežnik potrebuje certifikat: dokazilo, ki ga podpiše izdajatelj certifikatov (CA), ki mu brskalniki zaupajo, da ta ključ pripada temu imenu. Običajen certifikat dokazuje samo, da prosilec upravlja ime domene (preverjanje domene). Ne pove ničesar o tem, kdo ste ali ali ste zaupanja vredni.
Let's Encrypt je brezplačen CA, ki izdaja samo certifikate s preverjeno domeno, popolnoma samodejno prek protokola ACME. Program na Vašem strežniku (odjemalec ACME) zaprosi za certifikat, dokaže, da upravlja ime, ga namesti in pravočasno obnovi. Ta lekcija uporablja certbot, odjemalca organizacije EFF. Caddy (lekcija 7.4) ima odjemalca ACME že vgrajenega.
Kako dokažete, da upravljate ime?
Let's Encrypt pozna tri vrste izzivov (challenges):
| Izziv | Kako | Vrata | Nadomestni znak (*.example.com) |
|---|---|---|---|
| HTTP-01 | postavite datoteko pod http://<naam>/.well-known/acme-challenge/ | 80 | ne |
| DNS-01 | nastavite zapis TXT _acme-challenge.<naam> | brez | da |
| TLS-ALPN-01 | med rokovanjem TLS pokažete poseben certifikat | 443 | ne |
Za običajen VPS s spletnim mestom je HTTP-01 najpreprostejši. Za to mora veljati:
- ime z zapisom A (in AAAA) kaže na Vaš strežnik (lekcija 7.1);
- vrata 80 so odprta za ves svet, tudi če Vaše mesto sicer uporablja samo https. Let's Encrypt preverja samo prek vrat 80 in z več lokacij na internetu; teh naslovov ne morete vpisati v požarni zid;
- Vaš strežnik prek IPv4 in IPv6 odgovarja enako. Če ima ime zapis AAAA, Let's Encrypt najprej poskusi IPv6. Samo če prek IPv6 sploh ni povezave, preklopi na IPv4.
DNS-01 potrebujete za certifikat z nadomestnim znakom (wildcard) ali če strežnik od zunaj ni dosegljiv. Takrat mora odjemalec ACME znati spreminjati Vaš DNS, običajno prek ključa API Vašega ponudnika DNS. Ta ključ lahko spremeni ves Vaš DNS: hranite ga enako skrbno kot geslo.
Namestitev certbot
Avtorji certbot priporočajo snap, ker ima vedno najnovejšo različico. Na Debianu in Ubuntuju ga lahko namestite tudi kar iz repozitorija paketov:
anna@web1:~$ sudo apt install certbot python3-certbot-nginxRazličica iz distribucije je starejša, vendar prejema varnostne posodobitve prek apt (lekciji 4.1 in 4.2), kar se ujema s preostankom tega tečaja. Izberite eno od obeh možnosti, ne obeh: dve namestitvi si pri obnavljanju stopita na prste.
Pridobitev certifikata
Ko spletno mesto iz lekcije 7.2 že deluje na vratih 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 in podrobnosti so primer.) Vtičnik --nginx naredi tri stvari: začasno pripravi izziv, prevzame certifikat in prilagodi Vaš blok strežnika z blokom listen 443 ssl in preusmeritvijo s http na https. Če želite to raje narediti sami, uporabite certbot certonly --nginx in vrstice sami vpišite v konfiguracijo.
Na nekaj stvari bodite pozorni:
- Zaprosite za vsa imena naenkrat, ki spadajo k spletnemu mestu (
-dza vsako ime). Vsako ime mora kazati na strežnik, sicer ne uspe celotna zahteva. - Zasebni ključ (
privkey.pem) je v/etc/letsencrypt/live/in ga lahko bere samo root. Ne kopirajte ga drugam in ga nikoli ne shranite v varnostno kopijo, ki jo lahko berejo drugi. - E-poštni naslov ni obvezen. Let's Encrypt od junija 2025 ne pošilja več sporočil, ko certifikat skoraj poteče. Sami morate torej nadzorovati, ali obnavljanje uspeva (lekcija 8.3).
Preusmeritev s http na https
Po certbot je Vaša konfiguracija videti približno takole (počiščeno; certbot sam doda komentarje # managed by Certbot in včasih vrstice 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 vse, kar pride prek http, preusmeri na isto ime in isto pot prek https, s trajno preusmeritvijo (301). Datoteka izziva za obnavljanje še vedno deluje: Let's Encrypt tej preusmeritvi sledi. Drugi blok je pravo spletno mesto. Če želite še www preusmeriti na golo ime (ali obratno), to naredite v ločenem bloku, da obiskovalci vidijo eno stalno ime.
Obnavljanje: samodejno, in preverite ga
Certifikat Let's Encrypt zdaj velja 90 dni. To se bo skrajšalo: Let's Encrypt je napovedal, da bo privzeti profil od 10. februarja 2027 izdajal certifikate za 64 dni, od 16. februarja 2028 pa za 45 dni. Ročno obnavljanje torej ne pride v poštev; mora potekati samodejno.
certbot ob namestitvi postavi časovnik systemd (ali vrstico cron), ki dvakrat na dan preveri, ali je treba kateri certifikat obnoviti. Preverite, da obstaja, in obnavljanje preizkusite s poskusno zahtevo:
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 obnovitvi mora nginx naložiti tudi novi certifikat. Z vtičnikom nginx za to poskrbi certbot sam; če uporabljate certonly, nastavite deploy hook, ki znova naloži nginx, na primer izvedljiv skript v /etc/letsencrypt/renewal-hooks/deploy/ z systemctl reload nginx.
Dobri odjemalci ACME uporabljajo ARI (ACME Renewal Information): Let's Encrypt takrat sam pove, kdaj je treba certifikat obnoviti, na primer prej, če je z neko serijo certifikatov kaj narobe. Zato svojega odjemalca redno posodabljajte.
Ko zahteva ne uspe
| Sporočilo (skrajšano) | Vzrok | Rešitev |
|---|---|---|
Timeout during connect (likely firewall problem) | vrata 80 so zaprta ali ime kaže na drug naslov | požarni zid (lekcija 5.2), A/AAAA (lekcija 7.1) |
Invalid response from http://.../.well-known/acme-challenge/...: 404 | odgovarja drug strežnik ali drug blok strežnika, pogosto prek IPv6 | listen [::]:80, preverite zapis AAAA |
CAA record for example.com prevents issuance | zapis CAA dovoljuje samo drugega izdajatelja | prilagodite CAA (lekcija 7.1) |
too many certificates already issued | omejitev (rate limit) | počakajte; preizkušajte s staging |
Let's Encrypt ima omejitve (rate limits), ki preprečujejo zlorabo. Najpomembnejše: največ 50 novih certifikatov na registrirano domeno v 7 dneh, največ 5 certifikatov za natanko enak nabor imen v 7 dneh in največ 5 neuspelih preverjanj na ime na uro. Kdor preizkuša in vedno znova zahteva certifikat, hitro naleti nanje. Zato preizkušajte v okolju staging, ki ima precej širše meje, vendar izdaja certifikate, ki jim brskalniki ne zaupajo:
anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.comKo tam deluje, zaprosite za pravi certifikat.
Na AlmaLinux in Rocky Linux
Tam certbot dobite iz EPEL (dnf install certbot python3-certbot-nginx) ali kot snap. Vtičnik in ukazi so enaki. Ne pozabite na firewalld (--add-service=http --add-service=https) in na SELinux, če so certifikati na nenavadnem mestu.
V praksi
Pri paketu gostovanja za certifikat poskrbi nadzorna plošča (pri WebOké in pri drugih ponudnikih gostovanja z DirectAdmin, cPanel ali Plesk). Na VPS to naredite sami, s certbot, Caddy ali odjemalcem ACME, ki je del Vaše programske opreme. To velja pri vsakem ponudniku.
Povzetek
- Certifikat Let's Encrypt dokazuje, da upravljate ime; certbot zanj zaprosi, ga namesti in obnavlja prek ACME.
- HTTP-01 potrebuje vrata 80 odprta za vse in enak odgovor prek IPv4 in IPv6; DNS-01 je za nadomestne znake.
certbot --nginx -d ... -d ...poskrbi za certifikat in preusmeritev na https; za vsa imena spletnega mesta zaprosite naenkrat.- Certifikati zdaj veljajo 90 dni in se bodo skrajšali; preverite časovnik in
certbot renew --dry-runter sami nadzorujte datum poteka. - Preizkušajte z
--staging, da se izognete omejitvam; pazite na CAA.
Kviz
Naloga
Naloga Z7.3: https z veljavnim certifikatom. Za svoje spletno mesto pridobite certifikat (s certbot ali Caddy), preusmerite http na https in obnavljanje preizkusite z certbot renew --dry-run (pri Caddy: v dnevnikih preverite, ali je bil certifikat prevzet). Vnesite ime svojega spletnega mesta. Program vzpostavi povezavo TLS na vrata 443 in preveri, ali je certifikat veljaven, ali ga je podpisal zaupanja vreden izdajatelj in ali pokriva Vaše ime, nato pa zahteva http://<naam>/, da vidi, ali preusmerjate na https. Poleg tega vnesete, kdaj Vaš certifikat poteče in kako imate urejeno obnavljanje.
Za nadaljnje branje
- Aktivacija, podaljšanje in odpravljanje težav s certifikatom SSL
- Brezplačen DNS tečaj 5.2: CAA: kdo sme izdati 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
- Navodila za certbot (nginx): https://certbot.eff.org/instructions?ws=nginx&os=snap
