Nginx SSL-konfiguration
Komplett guide för konfiguration av SSL/TLS-certifikat i Nginx på Linux med OCSP-stapling, säkra cipher suites och omdirigering från HTTP till HTTPS.
Översikt
Nginx är en av världens mest populära webbservrar och reverse proxy-servrar. Denna guide täcker hela processen för SSL/TLS-konfiguration: från CSR-generering med OpenSSL, via certifikatinstallation och kedjebundling, till en säker konfiguration med moderna TLS-inställningar, OCSP-stapling och HSTS.
Förutsättningar
- Nginx 1.18+ installerat (äldre versioner stöder eventuellt inte TLS 1.3)
- OpenSSL installerat på serveren
- 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.keySkicka in innehållet i CSR-filen i din kontrollpanel hos FairSSL för att beställa certifikatet.
Steg 2: Förbered certifikatfiler och kedjebundling
När FairSSL har utfärdat certifikatet får du vanligtvis:
- Domäncertifikat:
eksempel_dk.crt - Intermediate/CA Bundle:
ca-bundle.crt
Nginx kräver att certifikatet och det mellanliggande certifikatet (intermediate) kombineras i en enda fil (fullchain). Ordningen är viktig -- ditt certifikat först, följt av det mellanliggande:
# 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: Inkludera inte rot-certifikatet i fullchain-filen. Webbläsare har redan rot-certifikaten förinstallerade.
Steg 3: Konfigurera Nginx server block för HTTPS
Skapa eller redigera din server block-konfiguration (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 (redirect) 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-stapling
OCSP-stapling förbättrar hastigheten på TLS-handskakningen genom att servern tillhandahåller certifikatets giltighetsstatus direkt:
# 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: Test och omstart
# 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"Använd även FairSSL:s SSL-scanner eller Qualys SSL Labs för en fullständig online-utvärdering av din TLS-konfiguration.
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 (intermediate). Skapa om filen med
cat cert.crt intermediate.crt > fullchain.crt. - OCSP-stapling fungerar inte: Det kan ta några minuter efter omstart innan Nginx hämtar OCSP-svar. Kontrollera med
openssl s_client -status. Se även till att resolvern ä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: Ställ in 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 cipher suites och protokollinställningar.
Mozilla SSL Configuration Generator guide