ssl_certificate și HTTPS în Nginx

Configurează certificatul, cheia privată, versiunile TLS (1.2/1.3) și cache-ul de sesiuni pentru HTTPS.

Sintaxă
ssl_certificate fișier.pem;
ssl_certificate_key cheie.key;
ssl_protocols TLSv1.2 TLSv1.3;

Ce face ssl_certificate și HTTPS

Pentru a servi un site pe HTTPS, un bloc server are nevoie de listen 443 ssl; și de cel puțin două directive: ssl_certificate (fișierul PEM care conține certificatul domeniului tău urmat de certificatul intermediar al autorității emitente — la Let’s Encrypt acesta este fullchain.pem) și ssl_certificate_key (cheia privată corespunzătoare — privkey.pem).

Pe lângă certificat, o configurație modernă dezactivează protocoalele vechi și nesigure (SSLv3, TLS 1.0, TLS 1.1) și păstrează doar TLSv1.2 și TLSv1.3, activează un cache partajat pentru sesiunile TLS (ssl_session_cache) astfel încât vizitatorii care revin să nu mai refacă întregul handshake criptografic și pornește http2 on;.

Cheia privată trebuie să aibă permisiuni stricte (0600, deținută de root). Nginx citește certificatul și cheia în procesul master (care pornește ca root), înainte de a ceda privilegiile către procesele worker (www-data).

Opțiuni și argumente

Opțiune / Parametru Descriere
Context: http, server Certificatele se pun în fiecare bloc server, iar protocoalele și cache-ul de sesiuni se pot pune o singură dată în http.
ssl_certificate Calea către lanțul complet de certificate în format PEM (fullchain.pem: certificatul site-ului + intermediarele).
ssl_certificate_key Calea către cheia privată în format PEM (privkey.pem).
ssl_protocols Versiunile TLS permise; astăzi recomandarea standard este TLSv1.2 TLSv1.3.
ssl_ciphers Lista cifrurilor pentru TLS 1.2; cu ssl_prefer_server_ciphers off; browserul alege cel mai rapid cifru comun.
ssl_session_cache Cache de sesiuni TLS partajat între workeri, de exemplu shared:SSL:10m (1 MB ≈ 4000 de sesiuni).
ssl_session_timeout Cât timp poate fi refolosită o sesiune din cache (de exemplu 1d).

Exemple

Exemplul 1: Bloc server HTTPS complet și modern

Configurație compatibilă cu profilul „Intermediate” Mozilla SSL Configuration Generator:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;

    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=63072000" always;

    root /var/www/example.com/public;
    index index.html;
}

Exemplul 2: Certificat self-signed rapid pentru dezvoltare locală

Generează o cheie și un certificat valabil 365 de zile într-o singură comandă OpenSSL:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/local.key -out /etc/ssl/certs/local.crt -subj "/CN=localhost"

Ieșire în terminal

Generating a RSA private key
................+++++
writing new private key to '/etc/ssl/private/local.key'

Greșeli frecvente

  • Folosirea cert.pem în loc de fullchain.pem în ssl_certificate: în browserele de pe desktop uneori funcționează (pentru că descarcă singure intermediarul), dar pe Android, curl sau apeluri API apare eroarea unable to verify the first certificate.
  • Ordinea inversată în fullchain.pem când concatenezi manual certificatele: primul în fișier trebuie să fie certificatul domeniului tău, iar după el certificatul intermediar (altfel nginx -t dă SSL_CTX_use_PrivateKey_file failed: key values mismatch).

Comenzi înrudite

  • certbot --nginx: Obține și reînnoiește automat certificate SSL gratuite Let’s Encrypt și actualizează configurația Nginx.
  • listen: Stabilește adresa IP și portul pe care un bloc server acceptă conexiuni.
  • Redirecționare HTTP → HTTPS: Tiparul recomandat pentru redirecționarea traficului de pe portul 80 pe HTTPS (și canonizarea cu sau fără www).
  • add_header: Adaugă antete HTTP în răspunsul trimis clientului (antete de securitate HSTS, CSP, X-Frame-Options sau CORS).
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: ssl_certificate și HTTPS

Ai o nelămurire despre utilizarea comenzii ssl_certificate și HTTPS sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.