SSL-certifikat får vara giltiga i högst 199 dagar. Senast 2027-03-15 blir gränsen 99 dagar, för DigiCert-certifikat redan från 2027-02-24. Läs mer →
Svensk support på svenska, vardagar 10:00-16:00 +46 10 101 03 34 info@fairssl.se
Nginx / Linux Avancerad ~4 min. lästid

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.

Nginx SSL-konfiguration

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

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

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

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å att resolver ä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: 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

Certifikat på många servrar och appliances

Ett offentligt SSL-certifikat får vara giltigt i högst 199 dagar nu, 99 dagar senast 2027-03-15 och 46 dagar senast 2029-03-15. Varje certifikat måste då bytas minst två gånger om året nu och minst åtta gånger om året från 2029, på varje server, brandvägg och lastbalanserare där det används. sslbrain från FairSSL körs som en appliance i ert eget nätverk och förnyar och installerar certifikaten från ett ställe, även på utrustning utan agent.

Så förnyar och installerar sslbrain certifikat på Nginx(öppnar sslbrain.com i en ny flik)

Redo att skapa ett gratis konto?

Skapa ett gratis konto och beställ ditt första certifikat. Ett DV-certifikat utfärdas på under 2 minuter.