SSL-certifikaternes maksimale levetid reduceres til 200 dage fra marts 2026. Læs mere →
Nginx / Linux Advanced ~4 min. læsetid

Nginx SSL Administration

Komplet guide til SSL/TLS-certifikatopsætning i Nginx på Linux med OCSP stapling, sikre cipher suites og HTTP til HTTPS redirect.

Nginx SSL Administration

Oversigt

Nginx er en af de mest populære webservere og reverse proxyer i verden. Denne guide dækker hele SSL/TLS-opsætningsprocessen: fra CSR-generering med OpenSSL, over certifikatinstallation og kædebundling, til en sikker konfiguration med moderne TLS-indstillinger, OCSP stapling og HSTS.

Forudsætninger

  • Nginx 1.18+ installeret (ældre versioner understøtter muligvis ikke TLS 1.3)
  • OpenSSL installeret på serveren
  • Root- eller sudo-adgang
  • Et domænenavn der peger på serverens IP-adresse
  • Et SSL-certifikat fra FairSSL (DV, OV eller EV)

Trin 1: Generer privat nøgle og CSR med OpenSSL

# Opret mappe til certifikatfiler
sudo mkdir -p /etc/nginx/ssl/eksempel.dk

# Generer 2048-bit RSA-noegle og 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"

# Saet restriktive tilladelser paa den private noegle
sudo chmod 600 /etc/nginx/ssl/eksempel.dk/privkey.key
sudo chown root:root /etc/nginx/ssl/eksempel.dk/privkey.key

Indsend indholdet af CSR-filen i dit FairSSL kontrolpanel for at bestille certifikatet.

Trin 2: Forbered certifikatfiler og kædebundling

Når FairSSL har udstedt certifikatet, modtager du typisk:

  • Domænecertifikat: eksempel_dk.crt
  • Intermediate/CA Bundle: ca-bundle.crt

Nginx kræver at certifikat og intermediate-certifikat kombineres i en enkelt fil (fullchain). Rækkefølgen er vigtig -- dit certifikat først, derefter intermediate:

# Opret fullchain-fil (certifikat + intermediate)
cat eksempel_dk.crt ca-bundle.crt | sudo tee /etc/nginx/ssl/eksempel.dk/fullchain.crt > /dev/null

# Kopier den private noegle (hvis den ikke allerede ligger der)
sudo cp privkey.key /etc/nginx/ssl/eksempel.dk/privkey.key

# Saet korrekte tilladelser
sudo chmod 644 /etc/nginx/ssl/eksempel.dk/fullchain.crt
sudo chmod 600 /etc/nginx/ssl/eksempel.dk/privkey.key

Vigtigt: Inkluder ikke rod-certifikatet i fullchain-filen. Browsere har allerede rod-certifikater forudinstalleret.

Trin 3: Konfigurer Nginx server block for HTTPS

Opret eller rediger din server block-konfiguration (typisk i /etc/nginx/sites-available/):

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.eksempel.dk eksempel.dk;

    # Certifikat og noegle
    ssl_certificate     /etc/nginx/ssl/eksempel.dk/fullchain.crt;
    ssl_certificate_key /etc/nginx/ssl/eksempel.dk/privkey.key;

    # TLS-protokoller (kun TLS 1.2 og 1.3)
    ssl_protocols TLSv1.2 TLSv1.3;

    # Cipher suites (moderne og sikre)
    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 og oevrig konfiguration
    root /var/www/eksempel.dk/public;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Trin 4: HTTP til HTTPS redirect

Tilføj en separat server block der omdirigerer al HTTP-trafik til HTTPS:

server {
    listen 80;
    listen [::]:80;
    server_name www.eksempel.dk eksempel.dk;

    # Redirect al trafik til HTTPS
    return 301 https://$host$request_uri;
}

Trin 5: Aktiver OCSP Stapling

OCSP stapling forbedrer TLS-handshake-hastigheden ved at servere certifikatets gyldighedsstatus direkte:

# Tilfoej i server-blokken (inden for ssl-konfigurationen):
ssl_stapling on;
ssl_stapling_verify on;

# Peg paa intermediate-certifikatet for OCSP-verifikation
ssl_trusted_certificate /etc/nginx/ssl/eksempel.dk/fullchain.crt;

# DNS resolver (brug din udbyder eller offentlige resolvere)
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

Trin 6: Test og genstart

# Test Nginx-konfigurationen for syntaksfejl
sudo nginx -t

# Genindlaes konfigurationen (uden nedetid)
sudo systemctl reload nginx

# Eller fuld genstart
sudo systemctl restart nginx

# Verificer at Nginx lytter paa port 443
sudo ss -tlnp | grep 443

Test certifikatet:

# Vis certifikatinfo og kaede
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"

# Test med curl
curl -vI https://www.eksempel.dk 2>&1 | grep -E "SSL|TLS|subject|issuer"

Brug også FairSSLs SSL-scanner eller Qualys SSL Labs for en fuld online evaluering af din TLS-konfiguration.

Fejlsøgning

  • "nginx: [emerg] cannot load certificate": Certifikatfilen er tom, beskadiget eller i forkert format. Kontroller at fullchain.crt indeholder gyldige PEM-blokke (begyndende med -----BEGIN CERTIFICATE-----).
  • "PEM routines:get_name:no start line": Filen indeholder ugyldige tegn eller har forkert encoding. Sørg for at filen er i UTF-8/ASCII uden BOM.
  • Browser viser "Not Secure": Fullchain-filen mangler intermediate-certifikatet. Genskab filen med cat cert.crt intermediate.crt > fullchain.crt.
  • OCSP stapling virker ikke: Det kan tage et par minutter efter genstart, før Nginx henter OCSP-svar. Tjek med openssl s_client -status. Kontroller også at resolver er konfigureret korrekt.
  • ERR_SSL_PROTOCOL_ERROR: Kontroller at port 443 er åben i firewallen (sudo ufw allow 443) og at listen 443 ssl er korrekt konfigureret.
  • Certifikat udløbet: Sæt en påmindelse eller overvågning. Tjek udløbsdato med openssl x509 -enddate -noout -in /etc/nginx/ssl/eksempel.dk/fullchain.crt.

Styrk din TLS-sikkerhed

Brug Mozilla SSL Configuration Generator til at generere en sikker TLS-konfiguration med moderne cipher suites og protokolindstillinger.

Mozilla SSL Configuration Generator guide

Klar til at oprette en gratis konto?

Opret en gratis konto og udsted dit første certifikat på under 10 minutter.