SSL-administration i Apache
Installation och administration av SSL/TLS-certifikat i Apache HTTP Server på Linux.
Introduktion
När du beställer ett SSL-certifikat krävs en Certificate Signing Request (CSR), som skapas utifrån en privat nyckel.
Om du vill skapa den privata nyckeln själv följer du Skapa CSR för certifikatbeställning, därefter Installation av SSL-certifikat och till sist Uppdatering av allmänna SSL-inställningar.
Om du redan har privat nyckel och certifikat följer du Installation av SSL-certifikat och därefter Uppdatering av allmänna SSL-inställningar.
Guiden är skriven med OpenSSL 1.1.1f och Apache 2.4.41 i standardkonfiguration.
Guiden beskriver hur du skapar, installerar och konfigurerar SSL i Apache på Linux.
Den passar bland annat Ubuntu, Red Hat och CentOS. Sökvägar och kommandon kan skilja sig något beroende på Linux-distribution.
- Kör följande kommando för att se vilken version av OpenSSL som är installerad:
openssl version

- Kör följande kommando för att se vilken version av apache2 som är installerad:
apache2 -v

- Med Mozilla SSL Configuration Generator kan du ta fram en SSL-konfiguration som du sedan anpassar till din server.
Du kan välja mellan nivåerna nedan. Vi rekommenderar Intermediate om du inte har ett särskilt skäl att välja något annat, och att du låter HSTS vara avstängt tills du vet exakt hur det fungerar.
(En uppdaterad lista över vilka klienter som stöds på varje nivå finns här: https://wiki.mozilla.org/Security/Server_Side_TLS)
- Modern: Högre säkerhet men lägre kompatibilitet, eftersom äldre webbläsare och andra äldre enheter utesluts.
Rekommenderas när alla klienter är kända, till exempel på en webbplats som bara används internt.
- Intermediate: En balans mellan medelhög säkerhet och hög kompatibilitet.
Rekommenderas för servrar som besöks av okända klienter, till exempel en webbutik. Säkerheten optimeras, men något äldre klienter kan fortfarande nå webbplatsen.
- Old: Låg säkerhet, högsta kompatibilitet.
Använd bara denna nivå om kompatibilitet väger tyngre än säkerhet, eftersom den tillåter utfasade SSL-standarder med kända sårbarheter.
- HSTS: (HTTP Strict Transport Security) är en header från servern som talar om för klienten att domänen bara får nås via HTTPS framöver. Klienten kommer ihåg det under den max-age som anges, även om headern tas bort från servern, så det går inte att backa om något går fel.
Följ en noggrann guide, var försiktig och använd 300 sekunder (5 minuter) i minst en vecka innan du ökar värdet stegvis.
Var försiktig med underdomäner och preload, om inte allt på domänen redan körs över HTTPS.
- OCSP Stapling: Slå på OCSP-häftning. Servern hämtar då certifikatets status med jämna mellanrum och skickar den till klienterna, i stället för att varje klient ska kontrollera statusen varje gång den ansluter till webbplatsen.

Skapa CSR för certifikatbeställning
I exemplet används ett enda DNS-namn, vilket fungerar för både standard- och SAN-certifikat. För ett wildcard-certifikat ändrar du Common Name till *.fairssl.dk
För att genomföra beställningen och skapa CSR:en behöver du följande uppgifter till certifikatet:
- Common Name (CN): Det fullständiga primära domännamnet. Exempel: www.fairssl.dk
- Organization Name (O): Organisationens fullständiga juridiska namn, exakt som det är registrerat hos Bolagsverket. Exempel: FairSSL A/S
- Organizational Unit (OU): Avdelningen som ska använda certifikatet. Får inte kunna förväxlas med ett annat företag. Vi rekommenderar att du lämnar fältet tomt eller anger företagsnamnet. Exempel: FairSSL A/S
- Locality (L): Ort. Exempel: Ørum Djurs
- State (S): Län eller region. Exempel: Norddjurs
- Country (C): Landskod enligt ISO-standard med två bokstäver, skrivs med versaler. Exempel: DK
Vi använder OpenSSL för att skapa både den privata nyckeln och CSR:en. Vid en standardinstallation ligger OpenSSL i /usr/local/ssl/bin.
Skapa privat nyckel
- Logga in på servern med ett administratörskonto.
- Kör följande kommando för att skapa en privat RSA-nyckel på 2048 bitar utan lösenord:
sudo openssl genrsa -out /etc/ssl/private/www.fairssl.dk.key 2048

Om nyckeln ska skyddas med lösenord kör du i stället följande kommando:
sudo openssl genrsa -des3 -out /etc/ssl/private/www.fairssl.dk.key 2048
Du blir då ombedd att ange det lösenord du vill ha för nyckelfilen.

- Kör följande kommando för att skapa Diffie-Hellman-parametrar på 2048 bitar:
sudo openssl dhparam -out /etc/ssl/private/dhparam.pem 2048

Vi skapar den privata nyckeln i /etc/ssl/private/ eftersom det är en skyddad katalog avsedd för just detta.
Skicka aldrig den privata nyckeln till oss via e-post.
Nyckelfilen ska förvaras säkert och bör inte lämna servern. Mindre nycklar, till exempel RSA 1024 bitar, kan inte användas.
Skapa CSR
- Kör följande kommando för att skapa en CSR med den privata nyckel du skapade tidigare:
sudo openssl req -new -key /etc/ssl/private/www.fairssl.dk.key -out /etc/ssl/private/www.fairssl.dk.csr
Om du skyddade nyckeln med lösenord blir du ombedd att ange det nu.
Ange uppgifterna du samlade in tidigare och tryck [ENTER] efter varje fält. Se till att Country Name är landskoden enligt ISO med två versaler. Lämna de tre sista fälten tomma, se exemplet nedan:
Country Name: DK
State or Province Name: Norddjurs
Locality Name: Ørum Djurs
Organization Name: FairSSL A/S
Organizational Unit Name: FairSSL A/S
Common Name: www.fairssl.dk
Email Address:
A Challenge Password:
An Optional Company Name:

- Kontrollera att CSR:en har skapats korrekt med följande kommando:
sudo openssl req -noout -text -in /etc/ssl/private/www.fairssl.dk.csr

- Öppna CSR-filen i en textredigerare (till exempel sudo nano /etc/ssl/private/www.fairssl.dk.csr) och kopiera hela texten, inklusive alla bindestreck i början och slutet.
Klistra in texten i CSR-fältet när du beställer certifikatet.
Så här ser en komplett CSR-text ut:

En CSR innehåller inga konfidentiella uppgifter, och det är ingen säkerhetsrisk att till exempel skicka den via okrypterad e-post.
Installation av SSL-certifikat
Om servern redan är i drift och har webbplatser konfigurerade följer du Server med befintliga webbplatser.
Om servern inte har några webbplatser konfigurerade, till exempel efter en nyinstallation, följer du Server utan befintliga webbplatser.
Server med befintliga webbplatser
- Logga in på servern med ett administratörskonto.
- Skapa följande filer i samma katalog som den privata nyckeln (till exempel /etc/ssl/private):
www.fairssl.dk.pem: Klistra in texten med ditt SSL-certifikat från e-postmeddelandet, inklusive alla bindestreck.
intermediate.pem: Klistra in texten med det mellanliggande certifikatet.
- Om den privata nyckeln har skapats någon annanstans, till exempel via vår CSR-tjänst, flyttar du den till /etc/ssl/private/ med följande kommando:
sudo mv ./www.fairssl.dk.key /etc/ssl/private/www.fairssl.dk.key
- Gå till /etc/apache2/sites-available
Om det är en ny webbplats kopierar du konfigurationsfilen från en annan webbplats (till exempel sudo cp www.fairssl.net.conf www.fairssl.dk.conf)
Öppna webbplatsens konfigurationsfil i en textredigerare (till exempel sudo nano www.fairssl.dk.conf).
Ändra följande uppgifter så att de stämmer med din webbplats (alla kommentarer är borttagna i bilden nedan för tydlighetens skull):

- Om webbplatsen inte redan är aktiv kör du följande kommando för att aktivera den:
sudo a2ensite www.fairssl.dk.conf

Om du kör kommandot på en webbplats som redan är aktiv får du en varning om att den redan är aktiverad, men det orsakar inga problem.
- Har du flera webbplatser upprepar du punkt 2-5 för varje webbplats.
Kom ihåg att ändra DocumentRoot, ServerName, SSLCertificateFile, SSLCertificateKeyFile och SSLCertificateChainFile så att de stämmer för respektive webbplats.
Se till att bara en VirtualHost är standard (_default_). Alla andra ska ha en IP-adress eller *.
- När certifikatet är kopplat till alla webbplatser som ska använda det uppdaterar du Apache-serverns allmänna SSL-inställningar, se Uppdatering av allmänna SSL-inställningar.
Server utan befintliga webbplatser
- Logga in på servern med ett administratörskonto.
- Skapa följande filer i samma katalog som den privata nyckeln (till exempel /etc/ssl/private):
www.fairssl.dk.pem: Klistra in texten med ditt SSL-certifikat från e-postmeddelandet, inklusive alla bindestreck.
intermediate.pem: Klistra in texten med det mellanliggande certifikatet.
- Om den privata nyckeln har skapats någon annanstans, till exempel via vår CSR-tjänst, flyttar du den till /etc/ssl/private/ med följande kommando:
sudo mv ./www.fairssl.dk.key /etc/ssl/private/www.fairssl.dk.key
- Kopiera default-ssl.conf i sites-available till en fil med samma namn som din webbplats:
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/www.fairssl.dk.conf

- Öppna den nya filen i en textredigerare (till exempel sudo nano www.fairssl.dk.conf).
Ändra följande uppgifter så att de stämmer med din webbplats (alla kommentarer är borttagna i bilden nedan för tydlighetens skull):
- DocumentRoot: Den fullständiga sökvägen till webbplatsens rotkatalog. Avsluta inte sökvägen med snedstreck.
- ServerName: Adresserna som webbplatsen ska nås på.
- SSLCertificateFile: Den fullständiga sökvägen till servercertifikatet.
- SSLCertificateKeyFile: Den fullständiga sökvägen till den privata nyckeln.
- SSLCertificateChainFile: Den fullständiga sökvägen till det mellanliggande certifikatet.

Om webbplatsen ska svara på både HTTP och HTTPS kopierar du VirtualHost-konfigurationen till ett block utanför SSL-delen och tar bort alla rader som innehåller SSL.
- Spara ändringarna och kör följande kommando för att aktivera webbplatsen:
sudo a2ensite www.fairssl.dk.conf

- Inaktivera standardwebbplatsen som följer med Apache, så att det bara finns en standardwebbplats:
sudo a2dissite 000-default.conf

- Har du flera webbplatser upprepar du punkt 2-6 för varje webbplats.
Kom ihåg att ändra DocumentRoot, ServerName, SSLCertificateFile, SSLCertificateKeyFile och SSLCertificateChainFile så att de stämmer för respektive webbplats.
Se till att bara en VirtualHost är standard (_default_). Alla andra ska ha en IP-adress eller *.
- När certifikatet är kopplat till alla webbplatser som ska använda det uppdaterar du Apache-serverns allmänna SSL-inställningar, se Uppdatering av allmänna SSL-inställningar.
Uppdatering av allmänna SSL-inställningar
Serverns SSL-inställningar uppdateras inte automatiskt när servern uppdateras, bland annat eftersom det kan bryta kompatibiliteten med äldre klienter.
Vi rekommenderar därför att du uppdaterar serverns SSL-inställningar varje gång du byter certifikat på den.
- Gör en säkerhetskopia av ssl.conf till ssl.conf.bak.
sudo cp /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-available/ssl.conf.bak
- Öppna ssl.conf i en textredigerare (till exempel sudo nano ssl.conf).
Lägg till de inställningar du tog fram med Mozillas generator under Introduktion som ligger utanför VirtualHost-blocket.
Anpassa inställningarna efter era behov.
(Alla kommentarer är borttagna i bilden nedan för tydlighetens skull.)

Vissa inställningar, till exempel SSLProtocol och SSLCipherSuite, finns troligen redan i filen. Se till att de bara förekommer en gång.
- Spara ändringarna och stäng textredigeraren.
- Kör ett konfigurationstest för att kontrollera att syntaxen i dina ändringar är korrekt:
sudo apachectl configtest

- Läs in konfigurationen på nytt med följande kommando så att ändringarna börjar gälla:
sudo systemctl reload apache2
Vi rekommenderar att du testar installationen med vår SSL-scanner på: https://www.fairssl.se/sv/verktyg/ssl-scanner
Mellanliggande certifikat
Här hittar du mellanliggande certifikat från de olika certifikatutfärdarna.
Vi rekommenderar att du använder det mellanliggande certifikat som skickades med beställningen, och bara hämtar det härifrån om du har tappat bort det, eftersom det medskickade alltid är rätt för ditt servercertifikat.
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