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 defullchain.pemînssl_certificate: în browserele de pe desktop uneori funcționează (pentru că descarcă singure intermediarul), dar pe Android,curlsau apeluri API apare eroareaunable to verify the first certificate. - Ordinea inversată în
fullchain.pemcând concatenezi manual certificatele: primul în fișier trebuie să fie certificatul domeniului tău, iar după el certificatul intermediar (altfelnginx -tdă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).
Întrebări & Exemple de Cod:
ssl_certificate și HTTPSAi o nelămurire despre utilizarea comenzii
ssl_certificate și HTTPSsau 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.