certbot –nginx în Nginx

SSL/TLS și securitate Certbot (Let's Encrypt)

Obține și reînnoiește automat certificate SSL gratuite Let's Encrypt și actualizează configurația Nginx.

Sintaxă
certbot --nginx -d domeniu.ro [-d www.domeniu.ro]
certbot certonly --webroot -w /var/www/site -d domeniu.ro

Ce face certbot --nginx

Certbot este clientul oficial pentru autoritatea de certificare gratuită Let’s Encrypt. Cu pluginul --nginx, Certbot citește fișierele tale din /etc/nginx/, găsește blocul server cu server_name potrivit, răspunde automat provocării HTTP-01, salvează certificatul în /etc/letsencrypt/live/domeniu/, adaugă directivele ssl_certificate și redirecționarea HTTPS și reîncarcă Nginx.

Dacă preferi ca Certbot să nu modifice singur fișierele de configurare Nginx, folosește subcomanda certonly împreună cu --webroot (sau --nginx): Certbot doar obține și reînnoiește fișierele din /etc/letsencrypt/, iar configurația Nginx o scrii și o controlezi tu.

Certificatele Let’s Encrypt sunt valabile 90 de zile. Pachetul certbot instalează automat un timer systemd (certbot.timer) care rulează de două ori pe zi și reînnoiește orice certificat care mai are mai puțin de 30 de zile până la expirare.

Opțiuni și argumente

Opțiune / Parametru Descriere
--nginx Folosește pluginul Nginx pentru validare și (fără certonly) pentru editarea automată a configurației.
certonly Obține doar certificatul pe disc, fără a modifica fișierele din /etc/nginx/.
--webroot -w cale Plasează fișierul de validare în cale/.well-known/acme-challenge/ fără a atinge configurația Nginx.
-d domeniu Domeniul sau subdomeniul inclus în certificat (poate fi repetat pentru mai multe nume).
renew --dry-run Simulează reînnoirea pe serverul de test Let’s Encrypt, pentru a verifica dacă reînnoirea automată va funcționa.
--deploy-hook "cmd" Comandă rulată doar după o reînnoire reușită (de exemplu systemctl reload nginx).

Exemple

Exemplul 1: Instalare și emiterea primului certificat pe Ubuntu / Debian

Domeniul trebuie să trimită deja prin DNS (înregistrare A/AAAA) către IP-ul serverului, iar portul 80 trebuie să fie deschis:

sudo apt update && sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Ieșire în terminal

Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/sites-enabled/example.com
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com

Exemplul 2: Obținerea certificatului fără modificarea fișierelor Nginx (webroot)

Varianta preferată când îți gestionezi configurația Nginx din Git sau Ansible:

sudo certbot certonly --webroot -w /var/www/example.com/public -d example.com -d www.example.com --deploy-hook "systemctl reload nginx"

Ieșire în terminal

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

Exemplul 3: Verificarea timerului și testarea reînnoirii automate

--dry-run nu consumă din limitele de rată Let’s Encrypt:

sudo systemctl status certbot.timer
sudo certbot renew --dry-run

Ieșire în terminal

● certbot.timer - Run certbot twice daily
     Active: active (waiting)

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)

Greșeli frecvente

  • Rularea repetată a comenzii normale când ai o greșeală în DNS sau firewall: Let’s Encrypt are o limită strictă pentru încercările eșuate pe oră. Când depanezi, adaugă --dry-run sau --test-cert.
  • Ștergerea manuală cu rm -rf a unui subdirector din /etc/letsencrypt/live/: lasă în urmă fișierele din renewal/ și archive/, iar certbot renew va da eroare. Folosește întotdeauna sudo certbot delete --cert-name example.com.
  • Reînnoirea certificatului cu certonly --webroot fără --deploy-hook "systemctl reload nginx": fișierele de pe disc se actualizează, dar Nginx păstrează în memorie vechiul certificat până la primul reload.

Comenzi înrudite

  • ssl_certificate și HTTPS: Configurează certificatul, cheia privată, versiunile TLS (1.2/1.3) și cache-ul de sesiuni pentru HTTPS.
  • Redirecționare HTTP → HTTPS: Tiparul recomandat pentru redirecționarea traficului de pe portul 80 pe HTTPS (și canonizarea cu sau fără www).
  • server_name: Stabilește numele de domeniu (antetul Host) pentru care răspunde un bloc server.
  • systemctl reload nginx: Pornește, oprește, repornește sau reîncarcă serviciul Nginx prin systemd.