Kort svar

En sikker Apache-TLS-opsætning bruger SSLCertificateFile med en fullchain-fil (eller en separat SSLCertificateChainFile på ældre versioner), sætter SSLProtocol til kun TLSv1.2 og TLSv1.3, en kort SSLCipherSuite med forward secrecy, aktiverer OCSP stapling og HSTS. Du reloader uden nedetid med apachectl graceful.

Den komplette VirtualHost

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com

    SSLEngine on

    # Fullchain-fil (leaf + intermediates). På httpd < 2.4.8
    # bruges i stedet en separat SSLCertificateChainFile.
    SSLCertificateFile    /etc/ssl/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem

    # Kun moderne protokoller
    SSLProtocol -all +TLSv1.2 +TLSv1.3

    # Stærke ciphers med forward secrecy; lad serveren bestemme
    SSLCipherSuite 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
    SSLHonorCipherOrder on

    # HSTS
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
</VirtualHost>

# OCSP stapling konfigureres globalt (uden for VirtualHost)
SSLUseStapling on
SSLStaplingCache "shmcb:/var/run/ocsp(128000)"

# Redirect HTTP til HTTPS
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

Certifikat-kæden: fullchain vs SSLCertificateChainFile

Fra httpd 2.4.8 kan SSLCertificateFile indeholde hele kæden (leaf + intermediates) i én fil — brug fullchain.pem. På ældre versioner skal du angive intermediates separat med SSLCertificateChainFile. Glemmer du kæden, fejler ikke-browser-klienter med "unable to get local issuer certificate" — se også certifikat-kæden forklaret.

SSLProtocol: slå alt gammelt fra

SSLProtocol -all +TLSv1.2 +TLSv1.3 deaktiverer eksplicit alt og tilføjer kun de to moderne versioner. Det er mere robust end at liste de gamle som -SSLv3 -TLSv1, fordi nye usikre protokoller ikke automatisk tillades.

Ciphers og OCSP stapling

Hold SSLCipherSuite kort og kun til AEAD-ciphers med ECDHE (forward secrecy). For TLS 1.3 er ciphers faste og styres ikke af denne direktive. SSLUseStapling skal stå i den globale konfiguration, ikke inde i VirtualHost'en, og kræver en stapling-cache. Læs mere om cipher suites og OCSP stapling.

Test og graceful reload

# Valider konfigurationen
sudo apachectl configtest

# Graceful reload — igangværende requests afsluttes først
sudo apachectl graceful

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

Mere om at udskifte certifikatet uden at afbryde forbindelser i certifikat-rotation uden nedetid, og om at holde det fornyet automatisk i ACME-pillaren.

Sådan verificerer CertControl jeres Apache-endpoints

Apache-konfigurationer drukner ofte i gamle, kopierede direktiver — og en glemt graceful betyder at det gamle certifikat stadig serveres. CertControl scanner endpointet udefra og bekræfter at kæden er komplet, at kun moderne protokoller tilbydes, og at certifikatet ikke er ved at udløbe — uafhængigt af hvad der står i konfigurationsfilen.

Ofte stillede spørgsmål

Skal intermediates i SSLCertificateFile eller SSLCertificateChainFile?

Fra httpd 2.4.8 kan du lægge hele kæden i SSLCertificateFile (brug fullchain.pem). På ældre versioner angiver du intermediates separat i SSLCertificateChainFile.

Hvad betyder SSLProtocol -all +TLSv1.2 +TLSv1.3?

Det slår alle protokoller fra og tilføjer derefter kun TLS 1.2 og 1.3. Det er den sikreste form, fordi den ikke utilsigtet tillader gamle eller fremtidige usikre protokoller.

Hvor konfigureres OCSP stapling i Apache?

SSLUseStapling og SSLStaplingCache hører i den globale serverkonfiguration, ikke inde i den enkelte VirtualHost. Cachen deles på tværs af hosts.

Hvad er forskellen på apachectl graceful og restart?

graceful lader hver child-proces afslutte sit aktuelle request, før den genindlæses med den nye konfiguration — ingen forbindelser brydes. En restart afbryder alt med det samme.

Skal jeg sætte SSLHonorCipherOrder?

Med TLS 1.2 kan det give mening at lade serveren bestemme rækkefølgen via SSLHonorCipherOrder on. For TLS 1.3 har det ingen effekt, da cipher-valget håndteres anderledes.