SSL-certifikatens maximala livslängd reduceras till 200 dagar från mars 2026. Läs mer →
Nginx / Linux Advanced ~4 min. lästid

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.

Nginx SSL-konfiguration

Ö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.key

Skicka 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.key

Viktigt: 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 443

Testa 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 att listen 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

Redo att skapa ett gratis konto?

Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.