Sådan sætter du Apache2 op til at køre SSL

Da jeg kører webmail på min server ville jeg gerne kører https således at dit brugernavn/adgangskode og indholdet af mine e-mails ikke bliver opsnappet af uvedkomne. Da hvordan man gjorde dette ikke var umiddelbart indlysende har jeg lavet denne guide så andre kan få glæde af mine erfaringer.

Først skal vi generere krypterings nøglerne. Dette gøres med følgende kommandoer (der, som alle andre kommandoer i denne guide skal køres som root):

Først skifter vi til apache2 ssl biblioteket (Behøves ikke, men gør det nemmere at få fat i certifikatet senere)
cd /etc/apache2/ssl/

Og derefter genereres certifikatet:
openssl genrsa -out ssl.key 1024 openssl req -new -key ssl.key -out ssl.csr

Når du kører den sidste kommando vil du blive spurgt om ting som dit navn osv. Den vigtige ting her er når du bliver spurgt om host. Den skal være præcis det samme som domænenavnet, ellers vil brugerne få en fejl.
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt -days 365 angiver hvor længe nøglen er gyldig. I dette tilfælde 365 dage.
Når den er genereret skal du fortælle apache at den skal bruge SSL med kommandoen a2enmod der loader nye moduler i apache ved at skrive (Dette skridt er kun relevant på debian baserede systemer (inklusiv ubuntu): a2enmod ssl

Når SSL nå er slået til skal vi også fortælle apache at den skal lytte på https porten der er 443.

Dette gøres ved at tilføje linien: Listen 443 Til filen: /etc/apache2/ports.conf

Nu skal du så opsætte din virtual host i apache. Den kunne for eksempel se ud som den følgende og skal som regel ligge i filen /etc/apache2/sites-available/ default:

DocumentRoot /stien/til/din-webmail ServerName webmail.martinschultz.dev allow from all Options +Indexes SSLEngine on SSLProtocol +SSLv2 +SSLv3 SSLCertificateFile /etc/apache2/ms.dk.crt SSLCertificateKeyFile /etc/apache2/ms.dk.key ServerAlias webmail.martinschultz.dev ErrorLog  /stien/til/din-webmail/webmail.log LogLevel notice Options FollowSymLinks Includes Includes NOEXEC SymLinksIfOwnerMatch

Det vigtige i denne fil er at adressen i VitualHost bliver efterfulgt af :443 og sll bliver slået til og peget hen på certifikatet hvilket sker med:
SSLEngine on SSLProtocol +SSLv2 +SSLv3
SSLCertificateFile /etc/apache2/ms.dk.crt
SSLCertificateKeyFile /etc/apache2/ms.dk.key