Moodul 7 · 7.3
https Let's Encryptiga
Moodul 7: Domeen, veebiserver ja https · Lugemisaeg: 12 minutit
Õpieesmärk: Pärast seda õppetundi oskad certbotiga taotleda nginxile Let's Encrypti tasuta sertifikaati, suunata http-liikluse https-ile, kontrollida automaatset uuendamist ja lahendada taotlemisel kõige sagedamini ette tulevaid vigu.
Põhimõisted: sertifikaat, sertifitseerimiskeskus (CA), ACME, Let's Encrypt, domeeni valideerimine, HTTP-01, DNS-01, TLS-ALPN-01, certbot, uuendamine, certbot renew --dry-run, kehtivusaeg, ARI, päringupiirangud (rate limits), staging, CAA, https-ile suunamine
Miks https ja mida sertifikaat tõendab
Ilma https-ita liigub kõik brauseri ja serveri vahel võrgus krüptimata kujul: paroolid, vormid, küpsised. Igaüks teel (avalik wifi, häkitud ruuter) saab neid lugeda või muuta. Seetõttu märgivad brauserid http-saidid kui "ebaturvalised" ja mõni funktsioon töötab ainult https kaudu. Paroolihoidla Vaultwarden (õppetund 9.4) jaoks on https lausa kohustuslik.
https kasutab TLS-i ja selleks vajab su server sertifikaati: tõendit, mille on allkirjastanud brauserite usaldatud sertifitseerimiskeskus (CA) ja mis kinnitab, et see võti kuulub selle nime juurde. Tavaline sertifikaat tõendab ainult seda, et taotleja haldab domeeninime (domeeni valideerimine). See ei ütle midagi selle kohta, kes sa oled või kas sa oled usaldusväärne.
Let's Encrypt on tasuta CA, mis väljastab ainult domeeniga valideeritud sertifikaate, täiesti automaatselt ACME-protokolli kaudu. Sinu serveris olev programm (ACME-klient) taotleb sertifikaadi, tõendab, et haldab nime, paigaldab sertifikaadi ja uuendab seda õigel ajal. Selles õppetunnis kasutame EFF-i klienti certbot. Caddyl (õppetund 7.4) on ACME-klient sisse ehitatud.
Kuidas tõendada, et haldad nime?
Let's Encryptil on kolme tüüpi väljakutseid (challenges):
| Väljakutse | Kuidas | Port | Metamärk (*.example.com) |
|---|---|---|---|
| HTTP-01 | pane fail asukohta http://<naam>/.well-known/acme-challenge/ | 80 | ei |
| DNS-01 | lisa TXT-kirje _acme-challenge.<naam> | puudub | jah |
| TLS-ALPN-01 | näita TLS-kätlusel spetsiaalset sertifikaati | 443 | ei |
Tavalise veebisaidiga VPS-i puhul on HTTP-01 kõige lihtsam. Selleks peab:
- nimi viitama A- (ja AAAA-) kirjega sinu serverile (õppetund 7.1);
- port 80 olema avatud kogu maailmale, ka siis, kui su sait kasutab muidu ainult https-i. Let's Encrypt valideerib ainult pordi 80 kaudu ja mitmest kohast internetis; neid aadresse ei saa sa tulemüüri lisada;
- su server vastama IPv4 ja IPv6 kaudu ühtmoodi. Kui nimel on AAAA-kirje, proovib Let's Encrypt esmalt IPv6-t. Ainult siis, kui IPv6 kaudu ühendust üldse ei teki, läheb see üle IPv4-le.
DNS-01 on vaja metamärgiga sertifikaadi jaoks või siis, kui server pole väljastpoolt kättesaadav. Siis peab ACME-klient saama su DNS-i muuta, tavaliselt sinu DNS-teenuse pakkuja API-võtme abil. Selle võtmega saab muuta kogu su DNS-i: hoia seda sama hoolikalt kui parooli.
certboti paigaldamine
certboti tegijad soovitavad snapi, sest selles on alati uusim versioon. Debianis ja Ubuntus saab selle ka lihtsalt pakiallikast:
anna@web1:~$ sudo apt install certbot python3-certbot-nginxDistributsiooni versioon on vanem, kuid saab turvauuendusi apt kaudu (õppetunnid 4.1 ja 4.2) ja see sobib ülejäänud kursusega. Vali üks neist kahest, mitte mõlemat: kaks paigaldust segavad uuendamisel teineteist.
Sertifikaadi taotlemine
Kui õppetunni 7.2 sait juba töötab pordil 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(Kuupäev ja üksikasjad on näitlikud.) Plugin --nginx teeb kolme asja: valmistab ajutiselt ette väljakutse, laadib sertifikaadi alla ja muudab su server blocki, lisades listen 443 ssl-ploki ja suunamise http-lt https-ile. Kui soovid seda ise teha, kasuta certbot certonly --nginx ja lisa read ise oma konfiguratsiooni.
Mõned asjad, millele tähelepanu pöörata:
- Taotle kõik saidiga seotud nimed korraga (
-diga nime kohta). Iga nimi peab viitama serverile, muidu ebaõnnestub kogu taotlus. - Privaatvõti (
privkey.pem) asub kaustas/etc/letsencrypt/live/ja on loetav ainult rootile. Ära kopeeri seda mujale ega pane seda kunagi varukoopiasse, mida teised saavad lugeda. - E-posti aadress on valikuline. Let's Encrypt ei saada alates 2025. aasta juunist enam e-kirju, kui sertifikaat hakkab aeguma. Pead seega ise jälgima, et uuendamine õnnestub (õppetund 8.3).
http suunamine https-ile
Pärast certbotit näeb su konfiguratsioon välja umbes selline (puhastatud; certbot lisab ise kommentaarid # managed by Certbot ja vahel ka if-read):
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;
...
}Esimene plokk suunab kõik http-päringud püsiva suunamisega (301) https kaudu samale nimele ja samale teele. Uuendamise väljakutsefail töötab endiselt: Let's Encrypt järgib seda suunamist. Teine plokk on päris sait. Kui soovid ka www suunata paljale nimele (või vastupidi), tee seda eraldi plokis, et külastajad näeksid ühte kindlat nime.
Uuendamine: automaatne ja kontrollitud
Let's Encrypti sertifikaat kehtib praegu 90 päeva. See aeg lüheneb: Let's Encrypt on teatanud, et standardprofiil väljastab alates 10. veebruarist 2027 64-päevaseid ja alates 16. veebruarist 2028 45-päevaseid sertifikaate. Käsitsi uuendamine pole seega lahendus; see peab käima automaatselt.
certbot loob paigaldamisel systemd-taimeri (või cron-rea), mis kaks korda päevas kontrollib, kas mõnda sertifikaati on vaja uuendada. Kontrolli, et see on olemas, ja testi uuendamist prooviaregistreerimisega:
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)Pärast uuendamist peab nginx ka uue sertifikaadi laadima. nginxi pluginaga hoolitseb certbot selle eest ise; kui kasutad certonly, lisa deploy hook, mis laadib nginxi uuesti, näiteks käivitatav skript kaustas /etc/letsencrypt/renewal-hooks/deploy/ sisuga systemctl reload nginx.
Head ACME-kliendid kasutavad ARI-t (ACME Renewal Information): siis ütleb Let's Encrypt ise, millal sertifikaati tuleb uuendada, näiteks varem, kui mõne sertifikaadipartiiga on probleem. Hoia seepärast oma klient ajakohane.
Kui taotlus ebaõnnestub
| Teade (lühendatud) | Põhjus | Lahendus |
|---|---|---|
Timeout during connect (likely firewall problem) | port 80 on suletud või nimi viitab teisele aadressile | tulemüür (õppetund 5.2), A/AAAA (õppetund 7.1) |
Invalid response from http://.../.well-known/acme-challenge/...: 404 | vastab teine server või teine server block, sageli IPv6 kaudu | listen [::]:80, kontrolli AAAA-kirjet |
CAA record for example.com prevents issuance | CAA-kirje lubab ainult teist väljastajat | muuda CAA-d (õppetund 7.1) |
too many certificates already issued | päringupiirang (rate limit) | oota; testi staging-keskkonnas |
Let's Encryptil on kuritarvitamise vältimiseks päringupiirangud (rate limits). Tähtsamad: kõige rohkem 50 uut sertifikaati registreeritud domeeni kohta 7 päeva jooksul, kõige rohkem 5 sertifikaati täpselt sama nimede komplekti kohta 7 päeva jooksul ja kõige rohkem 5 ebaõnnestunud valideerimist nime kohta tunnis. Kes katsetab ja taotleb ikka ja jälle uuesti, jõuab nendeni kiiresti. Testi seepärast staging-keskkonnas, kus piirangud on palju avaramad, kuid sertifikaate brauserid ei usalda:
anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.comKui seal töötab, taotle päris sertifikaat.
AlmaLinuxis ja Rocky Linuxis
Seal saad certboti EPEL-ist (dnf install certbot python3-certbot-nginx) või snapina. Plugin ja käsud on samad. Pea meeles firewalld (--add-service=http --add-service=https) ja SELinuxit, kui sertifikaadid asuvad ebatavalises kohas.
Praktikas
Majutuspaketi puhul hoolitseb sertifikaadi eest paneel (WebOkés ja teistes majutusettevõtetes, kus on DirectAdmin, cPanel või Plesk). VPS-is teed seda ise, certboti, Caddy või oma tarkvaraga kaasas oleva ACME-kliendiga. See kehtib iga pakkuja puhul.
Kokkuvõte
- Let's Encrypti sertifikaat tõendab, et haldad nime; certbot taotleb, paigaldab ja uuendab seda ACME kaudu.
- HTTP-01 vajab porti 80 avatuna kõigile ja sama vastust IPv4 ja IPv6 kaudu; DNS-01 on metamärkide jaoks.
certbot --nginx -d ... -d ...hoolitseb sertifikaadi ja https-ile suunamise eest; taotle saidi kõik nimed korraga.- Sertifikaadid kehtivad praegu 90 päeva ja see aeg lüheneb; kontrolli taimerit ja
certbot renew --dry-running jälgi aegumiskuupäeva ise. - Testi käsuga
--staging, et vältida päringupiiranguid; pea silmas CAA-d.
Test (quiz)
Ülesanne
Ülesanne Z7.3: https kehtiva sertifikaadiga. Taotle oma saidile sertifikaat (certboti või Caddyga), suuna http https-ile ja testi uuendamist käsuga certbot renew --dry-run (Caddy puhul: vaata logidest, kas sertifikaat on alla laaditud). Sisesta oma saidi nimi. Programm loob TLS-ühenduse porti 443 ja kontrollib, kas sertifikaat kehtib, on allkirjastatud usaldusväärse väljastaja poolt ja katab sinu nime, ning pärib seejärel http://<naam>/, et näha, kas suunad https-ile. Lisaks märgi, millal su sertifikaat aegub ja kuidas uuendamine sinu juures korraldatud on.
Loe edasi
- SSL-sertifikaadi aktiveerimine, uuendamine ja probleemide lahendamine
- Tasuta DNS-kursus 5.2: CAA: kes tohib väljastada sertifikaate?
- 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
- Certboti juhised (nginx): https://certbot.eff.org/instructions?ws=nginx&os=snap
