Kort svar

En sikker nginx-TLS-opsætning peger ssl_certificatefullchain (ikke kun leaf), tillader kun TLSv1.2 og TLSv1.3, bruger en kort liste af stærke cipher suites, aktiverer OCSP stapling og sætter HSTS. Efter ændringer kører du nginx -t og derefter nginx -s reload for at tage den i brug uden nedetid.

Den komplette server-blok

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com www.example.com;

    # Fullchain (leaf + intermediates), ikke kun cert.pem
    ssl_certificate     /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/privkey.pem;

    # Kun moderne protokoller
    ssl_protocols TLSv1.2 TLSv1.3;

    # Lad serveren bestemme cipher-rækkefølgen (kun relevant for 1.2)
    ssl_prefer_server_ciphers on;
    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;

    # Session-genoptagelse (ingen tickets => bedre forward secrecy)
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/example.com/chain.pem;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    # HSTS (sæt først preload når du er sikker)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

    root /var/www/example.com;
}

# Redirect al HTTP til HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Hvorfor fullchain, ikke cert.pem

Peger du ssl_certificate på kun leaf-certifikatet, sender serveren ikke intermediate'en — og curl, Java og mobilapps fejler med "unable to get local issuer certificate", selvom browseren virker. Brug altid fullchain.pem (certbots standardfil), så hele certifikat-kæden serveres.

Protokoller og ciphers

TLS 1.0 og 1.1 er udfaset; tillad kun 1.2 og 1.3. For TLS 1.3 bestemmer klienten cipher, og listen er fast og stærk — du behøver kun at sætte ssl_ciphers for 1.2. Hold listen kort og kun til AEAD-ciphers med forward secrecy (ECDHE). Læs mere om de bedste cipher suites.

OCSP stapling og HSTS

OCSP stapling lader serveren selv vedhæfte et frisk gyldighedsbevis for certifikatet, så klienten ikke skal kontakte CA'en — hurtigere og mere privat. ssl_trusted_certificate skal pege på issuer-kæden. HSTS tvinger browseren til altid at bruge HTTPS. Detaljer i OCSP stapling forklaret og hvad er HSTS.

Test og reload

# Valider konfiguration FØR reload
sudo nginx -t

# Graceful reload — ingen nedetid
sudo nginx -s reload

# Bekræft hvad der faktisk serveres
openssl s_client -connect example.com:443 -servername example.com

Mere om hvordan du udskifter certifikatet uden at afbryde forbindelser i certifikat-rotation uden nedetid, og hvordan du holder selve certifikatet fornyet automatisk i ACME-pillaren.

Sådan verificerer CertControl jeres nginx-endpoints

En konfiguration der ser rigtig ud i filen er ikke nødvendigvis det der serveres — en glemt reload, en forkert sti eller en udløbet stapling-kæde gør forskellen. CertControl scanner jeres nginx-endpoints udefra, bekræfter at den fulde kæde, de tilladte protokoller og de aktive ciphers matcher jeres hensigt, og advarer før certifikatet udløber.

Ofte stillede spørgsmål

Skal jeg bruge fullchain.pem eller cert.pem i ssl_certificate?

Altid fullchain.pem. cert.pem indeholder kun dit eget certifikat uden intermediates, hvilket får ikke-browser-klienter til at fejle. fullchain.pem indeholder leaf plus de nødvendige intermediates.

Hvilke TLS-protokoller bør nginx tillade?

Kun TLSv1.2 og TLSv1.3. TLS 1.0 og 1.1 er udfaset og afvises af moderne klienter, så de bør slås helt fra.

Hvorfor sætter jeg ikke ssl_ciphers for TLS 1.3?

I TLS 1.3 er cipher-suiterne faste og stærke, og klienten vælger. ssl_ciphers i nginx påvirker kun TLS 1.2. Derfor konfigurerer du kun ciphers for 1.2.

Hvad gør OCSP stapling?

Serveren henter selv et frisk gyldighedsbevis (OCSP-svar) for sit certifikat og vedhæfter det i handshaken, så klienten slipper for at kontakte CA'en. Det er hurtigere og mere privatlivsvenligt.

Hvordan tager jeg ændringer i brug uden nedetid?

Kør nginx -t for at validere, derefter nginx -s reload. Reload starter nye workers med den nye konfiguration mens gamle forbindelser afsluttes — ingen forbindelser brydes.