Apache SSL Administration
Opsætning og administration af SSL/TLS-certifikater i Apache HTTP Server på Linux.
Introduktion
Ved bestilling af et SSL-certifikat kræves en Certificate Signing Request (CSR), denne genereres ud fra en privat nøgle.
Ønsker du selv at oprette den private nøgle, skal du generere CSR-filen, følg derfor Generering af CSR til certifikatbestilling og derefter Installation af SSL-certifikat, slut af med Opdatering af generelle SSL indstillinger.
Har du privatnøgle og certifikat klar skal du følge Installation af SSL-certifikat efterfulgt af Opdatering af generelle SSL indstillinger.
Denne guide er lavet med OpenSSL 1.1.1f med en Apache 2.4.41 med standard opsætning.
Denne vejledning beskriver hvordan man opretter, installerer og konfigurerer SSL i Apache på Linux.
Vejledningen passer bl.a. til Ubuntu, Redhat, CentOS. Der kan være mindre forskelle på stier og kommandoer, afhængig af Linux udgave.
- For at se hvilken version af OpenSSL der er installeret, kør følgende kommando:
openssl version

- For at se hvilken version af apache2 der er installeret, kør følgende kommando:
apache2 -v

- På Mozilla SSL Configuration Generator kan du generere en SSL konfigurationstekst, som du skal tilpasse din server.
Du vil kunne vælge imellem nedenstående niveauer. Vi anbefaler Intermediate hvis ikke der er en speciel grund til at vælge andet, og at du ikke slår HSTS til, medmindre du er helt sikker på hvad du laver.
(For en opdateret liste over klientunderstøttelse til niveauerne se her https://wiki.mozilla.org/Security/Server_Side_TLS)
- Modern: Giver højere sikkerhed men lavere kompatibilitet da den udelukker en del ældre browsere og andre enheder.
Anbefalet hvis alle klienter er kendte, f.eks. på et website der kun anvendes internt.
- Intermediate: En balance af mellem-høj sikkerhed og høj kompatibilitet.
Generelt anbefalet til servere hvor ukendte klienter tilgår, f.eks. en webshop. Den optimerer sikkerheden, men tillader stadig lidt ældre klienter at tilgå websitet.
- Old: Lav sikkerhed, højeste kompatibilitet.
Denne indstilling kan kun anbefales hvis sikkerheden ikke er nær så vigtig som kompatibiliteten, da den åbner for udfasede SSL standarder der har kendte huller.
- HSTS: (HTTP Strict Transport Security) er en header fra serveren, der fortæller klienten at DNS domænet kun må tilgås via HTTPS fremover. Dette huskes af klienter i den max-age der sættes, uanset om det fjernes fra serveren igen, så der er ingen vej tilbage hvis det fejler.
Følg en grundig vejledning, vær konservativ og anvend 300 sekunder (5 min) i mindst en uge, inden der skrues gradvist op.
Pas på med subdomains og preload, med mindre alt på domænet allerede kører HTTPS.
- OCSP Stapling: Det er helt klart en fordel at slå OCSP til. Det gør at serveren henter status for certifikatet en gang imellem og afleverer det til klienter, i stedet for at samtlige klienter skal kontrollere status hver gang de forbinder til dit website.

Generering af CSR til certifikatbestilling
I dette eksempel har vi anvendt et enkelt DNS-navn som virker både til standard og SAN certifikater, til et wildcard skal Common Name skiftes til *.fairssl.dk
For at gennemføre en bestilling og genereringen af CSR koden, har du brug for at samle følgende oplysninger til certifikatet:
- Common Name (CN): Det primære fulde internet domænenavn. F.eks.: www.fairssl.dk
- Organization Name (O): Det fulde gyldige firmanavn, præcis som det står i CVR. F.eks.: FairSSL A/S
- Organizational Unit (OU): Afdelingen som skal bruge certifikatet. Må ikke kunne forveksles med et andet firma. Kan anbefales at efterlade den tom, eller at bruge firmanavnet. F. eks.: FairSSL A/S
- Locality (L): Bynavn. F.eks.: Ørum Djurs
- State (S): Stat eller kommune, i Danmark anvendes kommunen. F.eks.: Norddjurs
- Country (C): ISO-standard to-bogstavs landekode, skal være store bogstaver. F.eks.: DK
For både oprettelse af den private nøgle og CSR-forespørgslen, beskriver vi her anvendelsen af OpenSSL værktøjet. OpenSSL værktøjet er installeret under /usr/local/ssl/bin hvis du har en standard installation.
Oprettelse af privat nøgle
- Log ind på serveren med en administrator konto.
- Kør følgende kommando for at oprette en privat RSA 2048-bit nøgle uden password:
sudo openssl genrsa -out /etc/ssl/private/www.fairssl.dk.key 2048

Ønskes et password på nøglen kør i stedet følgende kommando:
sudo openssl genrsa -des3 -out /etc/ssl/private/www.fairssl.dk.key 2048
Du vil nu blive spurgt om at indtaste det ønskede password til nøglefilen.

- Kør følgende kommando for at oprette et 2048-bit Diffie-Helman parameter:
sudo openssl dhparam -out /etc/ssl/private/dhparam.pem 2048

Vi opretter den private nøgle i /etc/ssl/private/ fordi det er en sikret mappe specifikt lavet til dette formål.
Send aldrig privatnøglen til os via e-mail.
Nøglefilen skal opbevares sikkert og bør ikke forlade serveren. Det er ikke muligt at anvende mindre nøgler som f.eks. RSA 1024 bit.
Oprettelse af CSR
- Kør følgende kommando for at oprette en CSR med den private nøgle du lavede tidligere:
sudo openssl req -new -key /etc/ssl/private/www.fairssl.dk.key -out /etc/ssl/private/www.fairssl.dk.csr
Hvis du valgte at sikre nøglen med et password vil du blive spurgt om at indtaste det her.
Indtast de informationer du indsamlede tidligere til certifikatet efterfulgt af [ENTER], husk at sørge for at Country Name er ISO landekode med 2 store bogstaver. Derudover skal du ikke skrive noget i de sidste tre felter, se følgende eksempel:
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:

- Du kan nu bekræfte at din CSR er oprettet korrekt med følgende kommando:
sudo openssl req -noout -text -in /etc/ssl/private/www.fairssl.dk.csr

- Åben CSR-filen med en teksteditor (f.eks sudo nano /etc/ssl/private/www.fairssl.dk.csr), kopier hele teksten, inkl. alle bindestreger før og efter.
Under certifikatbestillingen skal du indsætte teksten i CSR-feltet.
følgende er et eksempel på en komplet CSR-tekst:

En CSR indeholder ingen fortrolige oplysninger og der er ingen sikkerhedsrisiko ved f.eks. at sende en CSR via ukrypteret e-mail.
Installation af SSL-certifikat
Hvis din server allerede er aktiv og du har sites sat op på den, følg Server med eksisterende sites.
Hvis du ikke har nogen sites sat op på din server, f.eks. ved nyinstallation, følg Server uden eksisterende sites.
Server med eksisterende sites
- Log ind på serveren med en administrator konto.
- Opret følgende filer der hvor din privatnøgle er (f.eks /etc/ssl/private):
www.fairssl.dk.pem: Kopier teksten med dit SSL-certifikat fra mailen ind i filen, inkl. alle bindestreger.
intermediate.pem: Kopier teksten fra certifikatets mellemudsteder (intermediate certificate) ind i filen.
- Hvis du har din privatnøgle fra et andet sted, f.eks. via vores CSR-service, flyt den ind i /etc/ssl/private/ med følgende kommando:
sudo mv ./www.fairssl.dk.key /etc/ssl/private/www.fairssl.dk.key
- Gå til /etc/apache2/sites-available
Hvis det er et nyt website, kopier konfigurationsfilen fra et andet website (f.eks.: sudo cp www.fairssl.net.conf www.fairssl.dk.conf)
Åben konfigurationsfilen til dit website i en teksteditor. (f.eks. sudo nano www.fairssl.dk.conf)
Korriger følgende informationer så de passer til dit website (alle kommentarer er fjernet på nedenstående billede for at gøre det overskueligt):

- Hvis det er et website der ikke allerede er aktivt, kør følgende kommando for at aktivere det:
sudo a2ensite www.fairssl.dk.conf

Køres kommandoen på et aktivt website fås en advarsel om at det allerede er aktiveret, men det giver ikke problemer.
- Hvis du har flere websites skal du følge punkt 2-5 for hvert website.
Husk at ændre DocumentRoot, ServerName, SSLCertificateFile, SSLCertificateKeyFile og SSLCertificateChainFile så de passer til de respektive websites.
Sørg for at der kun er én virtualhost der er default alle andre skal have en IP-adresse eller *, f.eks.:
- Når du har bundet certifikatet til alle de websites der skal bruge det, skal du opdatere de generelle SSL indstillinger for Apache serveren, følg Opdatering af generelle SSL indstillinger.
Server uden eksisterende sites
- Log ind på serveren med en administrator konto.
- Opret følgende filer der hvor din privatnøgle er (f.eks /etc/ssl/private):
www.fairssl.dk.pem: Kopier teksten med dit SSL-certifikat fra mailen ind i filen, inkl. alle bindestreger.
intermediate.pem: Kopier teksten fra certifikatets mellemudsteder (intermediate certificate) ind i filen.
- Hvis du har din privatnøgle fra et andet sted, f.eks. via vores CSR-service, flyt den ind i /etc/ssl/private/ med følgende kommando:
sudo mv ./www.fairssl.dk.key /etc/ssl/private/www.fairssl.dk.key
- Kopier default-ssl.conf i sites-available til en fil der har samme navn som dit website:
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/www.fairssl.dk.conf

- Åben den nye fil i en teksteditor. (f.eks. sudo nano www.fairssl.dk.conf)
Korriger følgende informationer så de passer til dit website (alle kommentarer er fjernet på nedenstående billede for at gøre det overskueligt):
- DocumentRoot: Den fulde sti til roden af dit website, det er vigtigt ikke at afslutte med en skråstreg.
- ServerName: De adresser websitet skal kunne nås på.
- SSLCertificateFile: Den fulde sti til server certifikatet.
- SSLCertificateKeyFile: Den fulde sti til privatnøglen.
- SSLCertificateChainFile: Den fulde sti til intermediate certifikatet.

Hvis den både skal svare på http og https skal kopieres til udenfor og alle linjer indeholdende SSL slettes.
- Gem ændringerne og kør følgende kommando for at aktivere websitet:
sudo a2ensite www.fairssl.dk.conf

- Deaktiver den default placeholder apache kommer med, så der kun er en default website:
sudo a2dissite 000-default.conf

- Hvis du har flere websites skal du følge punkt 2-6 for hvert website.
Husk at ændre DocumentRoot, ServerName, SSLCertificateFile, SSLCertificateKeyFile og SSLCertificateChainFile så de passer til de respektive websites.
Sørg for at der kun er én virtualhost der er default alle andre skal have en IP-adresse eller *, f.eks.:
- Når du har bundet certifikatet til alle de websites der skal bruge det, skal du opdatere de generelle SSL indstillinger for Apache serveren, følg Opdatering af generelle SSL indstillinger.
Opdatering af generelle SSL indstillinger
SSL indstillingerne på serveren bliver ikke automatisk opdateret når serveren bliver opdateret, bl.a. fordi det kan ødelægge kompatibiliteten med ældre klienter.
Vi anbefaler derfor at du opdaterer serverens SSL indstillinger hver gang du skifter et certifikat på den.
- Lav en sikkerhedskopi af ssl.conf til ssl.conf.bak.
sudo cp /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-available/ssl.conf.bak
- Åben ssl.conf i en teksteditor (f.eks.sudo nano ssl.conf).
Tilføj de informationer du genererede med Mozilla's generator i Introduktion som ikke er i delen.
Ret indstillingerne til så de passer til jeres behov.
(alle kommentarer er fjernet på nedenstående billede for at gøre det overskueligt).

Nogle af indstillingerne er der højst sandsynligt i forvejen såsom SSLProtocol og SSLChipherSuite, sørg for at de kun står én gang i filen.
- Gem ændringerne og luk teksteditoren.
- Kør en konfigurationstest for at se om syntaksen er korrekt i de ændringer du har lavet:
sudo apachectl configtest

- Genindlæs serveren med følgende kommando for at ændringerne træder i kraft:
sudo systemctl reload apache2
Vi anbefaler at du tester installationen med vores server tester på: https://www.fairssl.dk/da/vaerktoejer/ssl-scanner
Mellemudsteder certifikater
Her kan du finde mellemudstedercertifikater fra de forskellige udstedere.
Vi anbefaler at du bruger det medsendte mellemudstedercertifikat, og kun henter herfra hvis du mister det, da det medsendte altid vil være det korrekte til det bestilte servercertifikat.
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