7. modulis · 7.3
https ar Let's Encrypt
7. modulis: Domēns, tīmekļa serveris un https · Lasīšanas laiks: 12 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs ar certbot varēsiet pieprasīt bezmaksas Let's Encrypt sertifikātu nginx serverim, pāradresēt http uz https, pārbaudīt automātisko atjaunošanu un novērst biežākās kļūdas pieprasījuma laikā.
Pamatjēdzieni: sertifikāts, sertifikātu izdevējs (CA), ACME, Let's Encrypt, domēna validācija, HTTP-01, DNS-01, TLS-ALPN-01, certbot, atjaunošana, certbot renew --dry-run, derīguma termiņš, ARI, rate limits, staging, CAA, pāradresācija uz https
Kāpēc https un ko pierāda sertifikāts
Bez https viss starp pārlūku un serveri pa tīklu tiek sūtīts nešifrēts: paroles, veidlapas, sīkfaili. Ikviens ceļā (publisks wifi, uzlauzts maršrutētājs) var to izlasīt vai kaut ko mainīt. Tāpēc pārlūki http vietnes atzīmē kā "nav droša", un dažas funkcijas darbojas tikai caur https. Paroļu glabātuvei, piemēram, Vaultwarden (nodarbība 9.4), https ir pat obligāts.
https izmanto TLS, un tam Jūsu serverim nepieciešams sertifikāts: apliecinājums, ko parakstījis pārlūkiem uzticams sertifikātu izdevējs (CA), ka šī atslēga pieder šim nosaukumam. Parasts sertifikāts pierāda tikai to, ka pieprasītājs pārvalda domēna nosaukumu (domēna validācija). Tas neko nesaka par to, kas Jūs esat vai vai Jūs esat uzticams partneris.
Let's Encrypt ir bezmaksas CA, kas izdod tikai domēnam validētus sertifikātus, pilnīgi automātiski, izmantojot ACME protokolu. Programma Jūsu serverī (ACME klients) pieprasa sertifikātu, pierāda, ka pārvalda nosaukumu, to instalē un laikus atjauno. Šajā nodarbībā izmantojam certbot, EFF izstrādāto klientu. Caddy (nodarbība 7.4) ACME klients ir iebūvēts.
Kā pierādīt, ka Jūs pārvaldāt nosaukumu?
Let's Encrypt piedāvā trīs veidu pārbaudes (challenges):
| Pārbaude | Kā | Ports | Wildcard (*.example.com) |
|---|---|---|---|
| HTTP-01 | novietot failu zem http://<naam>/.well-known/acme-challenge/ | 80 | nē |
| DNS-01 | izveidot TXT ierakstu _acme-challenge.<naam> | nav | jā |
| TLS-ALPN-01 | TLS rokasspiediena laikā parādīt īpašu sertifikātu | 443 | nē |
Parastam VPS ar vietni vienkāršākā ir HTTP-01. Tam nepieciešams, lai:
- nosaukums ar A (un AAAA) ierakstu norādītu uz Jūsu serveri (nodarbība 7.1);
- ports 80 būtu atvērts visai pasaulei, arī ja Jūsu vietne citādi izmanto tikai https. Let's Encrypt validē tikai caur portu 80 un no vairākām vietām internetā; šīs adreses nav iespējams ierakstīt ugunsmūrī;
- Jūsu serveris caur IPv4 un IPv6 atbildētu vienādi. Ja nosaukumam ir AAAA ieraksts, Let's Encrypt vispirms mēģina IPv6. Tikai tad, ja caur IPv6 savienojumu vispār nevar izveidot, tas atgriežas pie IPv4.
DNS-01 Jums vajadzīgs wildcard sertifikātam vai tad, ja serveris nav sasniedzams no ārpuses. Tad ACME klientam jāspēj mainīt Jūsu DNS, parasti ar Jūsu DNS pakalpojumu sniedzēja API atslēgu. Ar šo atslēgu var mainīt visu Jūsu DNS: glabājiet to tikpat rūpīgi kā paroli.
certbot instalēšana
certbot izstrādātāji iesaka snap, jo tajā vienmēr ir jaunākā versija. Debian un Ubuntu to var instalēt arī vienkārši no pakotņu avota:
anna@web1:~$ sudo apt install certbot python3-certbot-nginxDistribūcijas versija ir vecāka, bet saņem drošības atjauninājumus caur apt (nodarbības 4.1 un 4.2), un tas atbilst pārējam šajā kursā. Izvēlieties vienu no abiem variantiem, ne abus: divas instalācijas atjaunošanas laikā traucē viena otrai.
Sertifikāta pieprasīšana
Ja vietne no nodarbības 7.2 jau darbojas uz porta 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(Datums un detaļas ir piemērs.) Spraudnis --nginx veic trīs darbības: uz laiku sagatavo pārbaudi, saņem sertifikātu un pielāgo Jūsu server block, pievienojot listen 443 ssl bloku un pāradresāciju no http uz https. Ja vēlaties to darīt paši, izmantojiet certbot certonly --nginx un ierakstiet rindas konfigurācijā paši.
Dažas lietas, kurām pievērst uzmanību:
- Pieprasiet visus nosaukumus uzreiz, kas pieder vietnei (
-dkatram nosaukumam). Katram nosaukumam jānorāda uz serveri, citādi neizdodas viss pieprasījums. - Privātā atslēga (
privkey.pem) atrodas/etc/letsencrypt/live/un ir lasāma tikai root. Nekopējiet to uz citām vietām un nekad neievietojiet to rezerves kopijā, ko var lasīt citi. - E-pasta adrese nav obligāta. Kopš 2025. gada jūnija Let's Encrypt vairs nesūta e-pastus, kad sertifikāta derīgums tuvojas beigām. Tāpēc Jums pašiem jāuzrauga, vai atjaunošana izdodas (nodarbība 8.3).
http pāradresācija uz https
Pēc certbot Jūsu konfigurācija izskatās aptuveni šādi (sakārtota; certbot pats pievieno komentārus # managed by Certbot un dažreiz if rindas):
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;
...
}Pirmais bloks visu, kas nāk caur http, pāradresē uz to pašu nosaukumu un to pašu ceļu caur https ar pastāvīgu pāradresāciju (301). Pārbaudes fails atjaunošanai joprojām darbojas: Let's Encrypt seko šai pāradresācijai. Otrais bloks ir īstā vietne. Ja vēlaties arī www pāradresēt uz nosaukumu bez prefiksa (vai otrādi), dariet to atsevišķā blokā, lai apmeklētāji redzētu vienu nemainīgu nosaukumu.
Atjaunošana: automātiski un ar pārbaudi
Let's Encrypt sertifikāts pašlaik ir derīgs 90 dienas. Šis termiņš kļūs īsāks: Let's Encrypt ir paziņojis, ka standarta profils no 2027. gada 10. februāra izdos sertifikātus uz 64 dienām un no 2028. gada 16. februāra uz 45 dienām. Manuāla atjaunošana tāpēc nav risinājums; tai jānotiek automātiski.
Instalēšanas laikā certbot izveido systemd taimeri (vai cron rindu), kas divreiz dienā pārbauda, vai kāds sertifikāts jāatjauno. Pārbaudiet, vai tas ir izveidots, un notestējiet atjaunošanu ar izmēģinājuma pieprasījumu:
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ēc atjaunošanas nginx jāielādē arī jaunais sertifikāts. Ar nginx spraudni certbot to nokārto pats; ja izmantojat certonly, izveidojiet deploy hook, kas pārlādē nginx, piemēram, izpildāmu skriptu mapē /etc/letsencrypt/renewal-hooks/deploy/ ar systemctl reload nginx.
Labi ACME klienti izmanto ARI (ACME Renewal Information): tad Let's Encrypt pats norāda, kad sertifikāts jāatjauno, piemēram, agrāk, ja ar kādu sertifikātu sēriju radusies problēma. Tāpēc uzturiet savu klientu atjauninātu.
Ja pieprasījums neizdodas
| Ziņojums (saīsināts) | Cēlonis | Risinājums |
|---|---|---|
Timeout during connect (likely firewall problem) | ports 80 ir slēgts, vai nosaukums norāda uz citu adresi | ugunsmūris (nodarbība 5.2), A/AAAA (nodarbība 7.1) |
Invalid response from http://.../.well-known/acme-challenge/...: 404 | atbild cits serveris vai cits server block, bieži caur IPv6 | listen [::]:80, pārbaudīt AAAA ierakstu |
CAA record for example.com prevents issuance | CAA ieraksts atļauj tikai citu izdevēju | pielāgot CAA (nodarbība 7.1) |
too many certificates already issued | rate limit | pagaidīt; testēt ar staging |
Let's Encrypt ir rate limits (pieprasījumu ierobežojumi), lai novērstu ļaunprātīgu izmantošanu. Svarīgākie: ne vairāk kā 50 jauni sertifikāti uz reģistrētu domēnu 7 dienās, ne vairāk kā 5 sertifikāti tieši tai pašai nosaukumu kopai 7 dienās un ne vairāk kā 5 neizdevušās validācijas vienam nosaukumam stundā. Ja Jūs eksperimentējat un pieprasāt atkal un atkal, šos ierobežojumus sasniegsiet ātri. Tāpēc testējiet ar staging vidi, kurai ir daudz plašāki ierobežojumi, bet kura izdod sertifikātus, kam pārlūki neuzticas:
anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.comJa tur viss darbojas, pieprasiet īsto sertifikātu.
AlmaLinux un Rocky Linux
Tur certbot pieejams no EPEL (dnf install certbot python3-certbot-nginx) vai kā snap. Spraudnis un komandas ir tādi paši. Atcerieties par firewalld (--add-service=http --add-service=https) un par SELinux, ja sertifikāti atrodas neierastā vietā.
Praksē
Hostinga plānā sertifikātu Jūsu vietā nokārto vadības panelis (pie WebOké un pie citiem hostinga uzņēmumiem ar DirectAdmin, cPanel vai Plesk). VPS serverī to darāt paši, ar certbot, Caddy vai ACME klientu, kas pieder Jūsu programmatūrai. Tas attiecas uz jebkuru pakalpojumu sniedzēju.
Kopsavilkums
- Let's Encrypt sertifikāts pierāda, ka Jūs pārvaldāt nosaukumu; certbot to pieprasa, instalē un atjauno caur ACME.
- HTTP-01 vajadzīgs ports 80, atvērts visiem, un vienāda atbilde caur IPv4 un IPv6; DNS-01 ir paredzēts wildcard sertifikātiem.
certbot --nginx -d ... -d ...nokārto sertifikātu un pāradresāciju uz https; pieprasiet visus vietnes nosaukumus uzreiz.- Sertifikāti pašlaik ir derīgi 90 dienas, un termiņš kļūs īsāks; pārbaudiet taimeri un
certbot renew --dry-run, un pašu spēkiem uzraugiet derīguma beigu datumu. - Testējiet ar
--staging, lai izvairītos no rate limits; pievērsiet uzmanību CAA.
Tests (quiz)
Uzdevums
Uzdevums Z7.3: https ar derīgu sertifikātu. Pieprasiet savai vietnei sertifikātu (ar certbot vai Caddy), pāradresējiet http uz https un notestējiet atjaunošanu ar certbot renew --dry-run (ar Caddy: pārbaudiet žurnālos, vai sertifikāts ir saņemts). Ievadiet savas vietnes nosaukumu. Programma izveido TLS savienojumu ar portu 443 un pārbauda, vai sertifikāts ir derīgs, vai to parakstījis uzticams izdevējs un vai tas aptver Jūsu nosaukumu, un pēc tam pieprasa http://<naam>/, lai redzētu, vai Jūs pāradresējat uz https. Papildus norādiet, kad beidzas Jūsu sertifikāta derīgums un kā Jums ir nokārtota atjaunošana.
Vairāk lasīt
- SSL sertifikāta aktivizēšana, atjaunošana un problēmu novēršana
- Bezmaksas DNS kurss 5.2: CAA: kam ir atļauts izsniegt sertifikātus?
- 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
- Certbot instrukcijas (nginx): https://certbot.eff.org/instructions?ws=nginx&os=snap
- Īsāki Let's Encrypt sertifikātu derīguma termiņi: ko tas nozīmē Jums?
- VPS: no pirmās pieteikšanās līdz drošam serverim 5.2: nginx ar Let's Encrypt sertifikātu
