Salt la conținut

Setări cookie-uri

Alegeți pentru fiecare tip ce cookie-uri permiteți. Puteți modifica oricând alegerea prin Setări cookie-uri, în partea de jos a fiecărei pagini. Declarație de confidențialitate

Necesare

Mereu active

Necesare pentru autentificare, pentru păstrarea coșului și pentru a vă reține alegerile. Acestea sunt mereu active.

Ce cookie-uri?
  • weboke_sessie, weboke_klant, weboke_remember: sesiunea și menținerea autentificării
  • weboke_basket: coșul de cumpărături
  • wkBtwIncl: afișarea prețurilor cu sau fără TVA
  • wok_cookies: alegerea privind cookie-urile, 12 luni

Măsoară ce reclamă duce la o vizită sau o comandă, ca să nu plătim pentru reclame care nu aduc nimic.

Ce cookie-uri?
  • Google Ads prin Google Tag Manager (_gcl_au, _gcl_aw), până la 90 de zile
  • OpenAI Ads, reclame în ChatGPT
  • wok_aff: prin ce partener ați ajuns la noi (program de afiliere), 60 de zile

4,6

Țară și limbă

Fiecare țară are propriul site, cu prețurile și TVA-ul pentru țara respectivă.

Vedeți

https cu Let's Encrypt

Modulul 7: Domeniu, server web și https · Timp de citire: 12 minute

Obiectivul lecției: După această lecție veți putea obține cu certbot un certificat gratuit de la Let's Encrypt pentru nginx, redirecționa http către https, verifica reînnoirea automată și rezolva cele mai frecvente erori care apar la o cerere de certificat.

Noțiuni cheie: certificat, autoritate de certificare (CA), ACME, Let's Encrypt, validarea domeniului, HTTP-01, DNS-01, TLS-ALPN-01, certbot, reînnoire, certbot renew --dry-run, durată de valabilitate, ARI, rate limits, staging, CAA, redirecționare către https

De ce https și ce dovedește un certificat

Fără https, tot ce circulă între browser și server trece necriptat prin rețea: parole, formulare, cookie-uri. Oricine se află pe traseu (o rețea wifi publică, un router compromis) poate citi sau modifica datele. De aceea browserele marchează site-urile http ca „nesigure”, iar unele funcții merg doar prin https. Pentru un seif de parole precum Vaultwarden (lecția 9.4), https este chiar obligatoriu.

https folosește TLS, iar pentru aceasta serverul dumneavoastră are nevoie de un certificat: o dovadă, semnată de o autoritate de certificare (CA) în care browserele au încredere, că această cheie aparține acestui nume. Un certificat obișnuit dovedește doar că solicitantul controlează numele de domeniu (validarea domeniului). Nu spune nimic despre cine sunteți sau dacă sunteți de încredere.

Let's Encrypt este o CA gratuită care emite doar certificate validate pe domeniu, complet automat, prin protocolul ACME. Un program de pe serverul dumneavoastră (clientul ACME) solicită certificatul, dovedește că deține controlul asupra numelui, îl instalează și îl reînnoiește la timp. Această lecție folosește certbot, clientul dezvoltat de EFF. Caddy (lecția 7.4) are un client ACME integrat.

Cum dovediți că dețineți controlul asupra numelui?

Let's Encrypt cunoaște trei tipuri de provocări (challenges):

ProvocareCumPortWildcard (*.example.com)
HTTP-01plasarea unui fișier în http://<naam>/.well-known/acme-challenge/80nu
DNS-01crearea unei înregistrări TXT _acme-challenge.<naam>niciunulda
TLS-ALPN-01prezentarea unui certificat special în timpul handshake-ului TLS443nu

Pentru un VPS obișnuit cu un site, HTTP-01 este cea mai simplă variantă. Pentru aceasta este necesar ca:

  • numele să indice serverul dumneavoastră prin A (și AAAA) (lecția 7.1);
  • portul 80 să fie deschis pentru întreaga lume, chiar dacă site-ul folosește în rest doar https. Let's Encrypt validează doar prin portul 80 și din mai multe locuri de pe internet; nu puteți trece acele adrese în firewall;
  • serverul să răspundă la fel prin IPv4 și prin IPv6. Dacă numele are o înregistrare AAAA, Let's Encrypt încearcă mai întâi IPv6. Doar dacă prin IPv6 nu se poate stabili deloc o conexiune, revine la IPv4.

DNS-01 vă trebuie pentru un certificat wildcard sau dacă serverul nu este accesibil din exterior. În acest caz, clientul ACME trebuie să vă poată modifica DNS-ul, de obicei printr-o cheie API de la furnizorul dumneavoastră de DNS. Această cheie poate modifica tot DNS-ul: păstrați-o la fel de atent ca pe o parolă.

Instalarea certbot

Dezvoltatorii certbot recomandă snap-ul, pentru că oferă întotdeauna cea mai nouă versiune. Pe Debian și Ubuntu îl puteți instala și direct din depozitul de pachete:

anna@web1:~$ sudo apt install certbot python3-certbot-nginx

Versiunea din distribuție este mai veche, dar primește actualizări de securitate prin apt (lecțiile 4.1 și 4.2), ceea ce se potrivește cu restul acestui curs. Alegeți una dintre cele două variante, nu pe amândouă: două instalări se încurcă reciproc la reînnoire.

Solicitarea unui certificat

Cu site-ul din lecția 7.2 deja funcțional pe portul 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

(Data și detaliile sunt doar un exemplu.) Plug-in-ul --nginx face trei lucruri: pregătește temporar provocarea, obține certificatul și vă modifică server block-ul, adăugând un bloc listen 443 ssl și o redirecționare de la http la https. Dacă preferați să faceți asta singur, folosiți certbot certonly --nginx și adăugați dumneavoastră regulile în configurație.

Câteva lucruri la care să fiți atent:

  • Solicitați dintr-odată toate numele care aparțin site-ului (-d pentru fiecare nume). Fiecare nume trebuie să indice serverul, altfel întreaga cerere eșuează.
  • Cheia privată (privkey.pem) se află în /etc/letsencrypt/live/ și poate fi citită doar de root. Nu o copiați în alte locuri și nu o puneți niciodată într-un backup pe care îl pot citi alții.
  • Adresa de e-mail este opțională. Din iunie 2025, Let's Encrypt nu mai trimite e-mailuri când un certificat este pe cale să expire. Prin urmare, trebuie să monitorizați singur dacă reînnoirea reușește (lecția 8.3).

Redirecționarea http către https

După certbot, configurația dumneavoastră arată aproximativ așa (simplificat; certbot adaugă singur comentarii # managed by Certbot și uneori linii 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;
    ...
}

Primul bloc redirecționează tot traficul http către același nume și aceeași cale prin https, cu o redirecționare permanentă (301). Fișierul de provocare pentru reînnoire funcționează în continuare: Let's Encrypt urmează această redirecționare. Al doilea bloc este site-ul propriu-zis. Dacă doriți să redirecționați și www către numele simplu (sau invers), faceți acest lucru într-un bloc separat, astfel încât vizitatorii să vadă un singur nume fix.

Reînnoirea: automată și verificată

Un certificat Let's Encrypt este în prezent valabil 90 de zile. Durata va scădea: Let's Encrypt a anunțat că profilul standard va emite certificate de 64 de zile începând cu 10 februarie 2027 și de 45 de zile începând cu 16 februarie 2028. Reînnoirea manuală nu este deci o opțiune; trebuie să se facă automat.

La instalare, certbot creează un timer systemd (sau o linie cron) care verifică de două ori pe zi dacă un certificat trebuie reînnoit. Verificați că acesta există și testați reînnoirea cu o cerere de probă:

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)

După reînnoire, nginx trebuie să încarce și noul certificat. Cu plug-in-ul nginx, certbot se ocupă singur de acest lucru; dacă folosiți certonly, creați un deploy hook care reîncarcă nginx, de exemplu un script executabil în /etc/letsencrypt/renewal-hooks/deploy/ cu systemctl reload nginx.

Clienții ACME buni folosesc ARI (ACME Renewal Information): Let's Encrypt indică atunci singur când trebuie reînnoit un certificat, de exemplu mai devreme dacă există o problemă cu o serie de certificate. De aceea, țineți clientul la zi.

Dacă o cerere eșuează

Mesaj (prescurtat)CauzăSoluție
Timeout during connect (likely firewall problem)portul 80 este închis sau numele indică o altă adresăfirewall (lecția 5.2), A/AAAA (lecția 7.1)
Invalid response from http://.../.well-known/acme-challenge/...: 404răspunde un alt server sau un alt server block, adesea prin IPv6listen [::]:80, verificați înregistrarea AAAA
CAA record for example.com prevents issuanceo înregistrare CAA permite doar o altă autoritate de certificaremodificați CAA (lecția 7.1)
too many certificates already issuedo rate limit (limită de cereri)așteptați; testați cu staging

Let's Encrypt are rate limits (limite de cereri) pentru a preveni abuzurile. Cele mai importante: cel mult 50 de certificate noi per domeniu înregistrat la 7 zile, cel mult 5 certificate pentru exact același set de nume la 7 zile și cel mult 5 validări eșuate per nume pe oră. Cine experimentează și solicită certificatul iar și iar ajunge repede la aceste limite. De aceea, testați cu mediul de staging, care are limite mult mai largi, dar emite certificate în care browserele nu au încredere:

anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.com

Dacă acolo funcționează, solicitați certificatul real.

Pe AlmaLinux și Rocky Linux

Acolo, certbot provine din EPEL (dnf install certbot python3-certbot-nginx) sau este instalat ca snap. Plug-in-ul și comenzile sunt aceleași. Țineți cont de firewalld (--add-service=http --add-service=https) și de SELinux dacă certificatele se află într-un loc neobișnuit.

În practică

La un pachet de găzduire, panoul se ocupă de certificat în locul dumneavoastră (la WebOké și la alte firme de găzduire cu DirectAdmin, cPanel sau Plesk). Pe un VPS faceți acest lucru singur, cu certbot, Caddy sau clientul ACME care vine cu software-ul dumneavoastră. Acest lucru este valabil la orice furnizor.

Rezumat

  • Un certificat Let's Encrypt dovedește că dețineți controlul asupra numelui; certbot îl solicită, îl instalează și îl reînnoiește prin ACME.
  • HTTP-01 are nevoie de portul 80 deschis pentru toată lumea și de același răspuns prin IPv4 și IPv6; DNS-01 este pentru wildcard-uri.
  • certbot --nginx -d ... -d ... se ocupă de certificat și de redirecționarea către https; solicitați dintr-odată toate numele unui site.
  • Certificatele sunt acum valabile 90 de zile, iar durata va scădea; verificați timer-ul și certbot renew --dry-run și monitorizați singur data de expirare.
  • Testați cu --staging pentru a evita rate limits; atenție la CAA.

Test (quiz)

1. Site-ul dumneavoastră trebuie să fie accesibil doar prin https. Puteți închide atunci portul 80 în firewall dacă folosiți HTTP-01?



2. Doriți un certificat pentru *.example.com. De ce provocare aveți nevoie?



3. Cererea eșuează cu un 404 la fișierul de provocare, deși curl http://example.com/ afișează site-ul dumneavoastră prin IPv4. Care este cauza cea mai probabilă?



4. De ce este reînnoirea automată mai importantă ca oricând?



5. Experimentați și ați solicitat deja de patru ori astăzi același certificat. Ce faceți la următoarea încercare?



Exercițiu

Exercițiul Z7.3: https cu un certificat valid. Solicitați un certificat pentru site-ul dumneavoastră (cu certbot sau Caddy), redirecționați http către https și testați reînnoirea cu certbot renew --dry-run (la Caddy: verificați în jurnale dacă certificatul a fost obținut). Introduceți numele site-ului dumneavoastră. Programul stabilește o conexiune TLS către portul 443 și verifică dacă certificatul este valid, este semnat de o autoritate de certificare de încredere și acoperă numele dumneavoastră, apoi solicită http://<naam>/ pentru a vedea dacă redirecționați către https. În plus, completați când expiră certificatul dumneavoastră și cum este organizată reînnoirea la dumneavoastră.

Exercițiul Z7.3: https cu un certificat valid

Doar pentru cursanții autentificați. Deschidem https://<naam>/ și http://<naam>/ ca un browser, de pe serverul nostru web.




Ceea ce completați și ceea ce găsim nu se salvează. Browserul dumneavoastră reține răspunsurile și dacă ați rezolvat exercițiul. Dacă sunteți autentificat, păstrăm în Cursurile mele doar faptul că exercițiul a fost (aproape) corect; și de acolo îl puteți șterge.

Lecturi suplimentare

Un moment…

Configurați domeniile

Stabiliți pentru fiecare domeniu nameserverele, legătura cu hostingul și cine devine titularul.

Se încarcă domeniile…