Nginx SSL-konfiguration
Komplett guide för konfiguration av SSL/TLS-certifikat i Nginx på Linux med OCSP-häftning, säkra chiffersviter och omdirigering från HTTP till HTTPS.
Översikt
Nginx är en av världens mest populära webbservrar och reverse proxy-servrar. Guiden går igenom hela SSL/TLS-konfigurationen: CSR-generering med OpenSSL, installation av certifikatet och certifikatkedjan samt en säker konfiguration med moderna TLS-inställningar, OCSP-häftning och HSTS.
Förutsättningar
- Nginx 1.18+ installerat (äldre versioner stöder eventuellt inte TLS 1.3)
- OpenSSL installerat på servern
- Root- eller sudo-åtkomst
- Ett domännamn som pekar på serverns IP-adress
- Ett SSL-certifikat från FairSSL (DV, OV eller EV)
Steg 1: Generera privat nyckel och CSR med OpenSSL
# Skapa mapp för certifikatfiler
sudo mkdir -p /etc/nginx/ssl/eksempel.dk
# Generera 2048-bit RSA-nyckel och CSR
sudo openssl req -new -newkey rsa:2048 -nodes \
-keyout /etc/nginx/ssl/eksempel.dk/privkey.key \
-out /etc/nginx/ssl/eksempel.dk/eksempel.csr \
-subj "/C=DK/ST=Hovedstaden/L=Koebenhavn/O=Eksempel A\/S/CN=www.eksempel.dk"
# Sätt restriktiva rättigheter på den privata nyckeln
sudo chmod 600 /etc/nginx/ssl/eksempel.dk/privkey.key
sudo chown root:root /etc/nginx/ssl/eksempel.dk/privkey.keyKlistra in innehållet i CSR-filen när du beställer certifikatet i din kontrollpanel hos FairSSL.
Steg 2: Förbered certifikatfilerna och certifikatkedjan
När FairSSL har utfärdat certifikatet får du vanligtvis:
- Domäncertifikat:
eksempel_dk.crt - Mellanliggande certifikat (CA Bundle):
ca-bundle.crt
Nginx kräver att certifikatet och det mellanliggande certifikatet ligger i samma fil (fullchain). Ditt certifikat ska stå först, följt av det mellanliggande certifikatet:
# Skapa fullchain-fil (certifikat + intermediate)
cat eksempel_dk.crt ca-bundle.crt | sudo tee /etc/nginx/ssl/eksempel.dk/fullchain.crt > /dev/null
# Kopiera den privata nyckeln (om den inte redan ligger där)
sudo cp privkey.key /etc/nginx/ssl/eksempel.dk/privkey.key
# Sätt korrekta rättigheter
sudo chmod 644 /etc/nginx/ssl/eksempel.dk/fullchain.crt
sudo chmod 600 /etc/nginx/ssl/eksempel.dk/privkey.keyViktigt: Lägg inte rotcertifikatet i fullchain-filen. Webbläsare har redan rotcertifikaten förinstallerade.
Steg 3: Konfigurera ett server-block i Nginx för HTTPS
Skapa eller redigera konfigurationen för ditt server-block (vanligtvis i /etc/nginx/sites-available/):
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.eksempel.dk eksempel.dk;
# Certifikat och nyckel
ssl_certificate /etc/nginx/ssl/eksempel.dk/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/eksempel.dk/privkey.key;
# TLS-protokoll (endast TLS 1.2 och 1.3)
ssl_protocols TLSv1.2 TLSv1.3;
# Cipher suites (moderna och säkra)
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 caching
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Document root och övrig konfiguration
root /var/www/eksempel.dk/public;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}Steg 4: Omdirigering från HTTP till HTTPS
Lägg till ett separat server-block som omdirigerar all HTTP-trafik till HTTPS:
server {
listen 80;
listen [::]:80;
server_name www.eksempel.dk eksempel.dk;
# Redirect all trafik till HTTPS
return 301 https://$host$request_uri;
}Steg 5: Aktivera OCSP-häftning
Med OCSP-häftning går TLS-handskakningen snabbare, eftersom servern själv skickar med certifikatets giltighetsstatus:
# Lägg till i server-blocket (inom ssl-konfigurationen):
ssl_stapling on;
ssl_stapling_verify on;
# Peka på intermediate-certifikatet för OCSP-verifiering
ssl_trusted_certificate /etc/nginx/ssl/eksempel.dk/fullchain.crt;
# DNS resolver (använd din leverantör eller offentliga resolvers)
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;Steg 6: Testa och starta om
# Testa Nginx-konfigurationen för syntaxfel
sudo nginx -t
# Ladda om konfigurationen (utan nedtid)
sudo systemctl reload nginx
# Eller fullständig omstart
sudo systemctl restart nginx
# Verifiera att Nginx lyssnar på port 443
sudo ss -tlnp | grep 443Testa certifikatet:
# Visa certifikatinformation och kedja
openssl s_client -connect www.eksempel.dk:443 -servername www.eksempel.dk < /dev/null 2>/dev/null | openssl x509 -noout -subject -dates -issuer
# Test OCSP stapling
openssl s_client -connect www.eksempel.dk:443 -servername www.eksempel.dk -status < /dev/null 2>/dev/null | grep -A 5 "OCSP Response"
# Testa med curl
curl -vI https://www.eksempel.dk 2>&1 | grep -E "SSL|TLS|subject|issuer"Testa även hela TLS-konfigurationen med FairSSL:s SSL-scanner eller Qualys SSL Labs.
Felsökning
- "nginx: [emerg] cannot load certificate": Certifikatfilen är tom, skadad eller har fel format. Kontrollera att fullchain.crt innehåller giltiga PEM-block (som börjar med
-----BEGIN CERTIFICATE-----). - "PEM routines:get_name:no start line": Filen innehåller ogiltiga tecken eller har fel kodning. Se till att filen är sparad i UTF-8/ASCII utan BOM.
- Webbläsaren visar "Inte säker" (Not Secure): Fullchain-filen saknar det mellanliggande certifikatet. Skapa om filen med
cat cert.crt intermediate.crt > fullchain.crt. - OCSP-häftning fungerar inte: Efter en omstart kan det dröja några minuter innan Nginx har hämtat ett OCSP-svar. Kontrollera med
openssl s_client -status. Kontrollera också attresolverär korrekt konfigurerad. - ERR_SSL_PROTOCOL_ERROR: Kontrollera att port 443 är öppen i brandväggen (
sudo ufw allow 443) och attlisten 443 sslär korrekt konfigurerat. - Certifikatet har gått ut: Sätt upp en påminnelse eller övervakning. Kontrollera utgångsdatum med
openssl x509 -enddate -noout -in /etc/nginx/ssl/eksempel.dk/fullchain.crt.
Förbättra din TLS-säkerhet
Använd Mozilla SSL Configuration Generator för att generera en säker TLS-konfiguration med moderna chiffersviter och protokollinställningar.
Guide till Mozilla SSL Configuration Generator