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.