Apache Virtual Host mit SSL einrichten

Ein kurzes HOWTO wie man einen Virtual Host für Apache mit einem selbst generierten SSL Zertifikat einrichtet. Diese Anleitung richtet sich nicht direkt an Beginner, da hier keinerlei Grundlagen erläutert werden. Bei Fragen versuche ich aber gerne in den Kommentaren zu helfen.

Die Anleitung bezieht sich auf einen Debian Etch Server und setzt Root Rechte vorraus.

Generierung des benötigen Zertifikats

Der folgende Punkt ist optional und nur notwendig wenn man vor hat, in Zukunft Zertifikate mit denselben Angaben zu erstellen. Hierzu editiert man das SSL Template unter /usr/share/ssl-cert/ssleay.cnf.

Nun erstellt man ein Verzeichniss um die Zertifikatsdaten zu speichern. Dieses sollte unbedingt vor fremden Zugriff geschützt sein, als Beispiel nehmen wir hier /root/ssl/ welches wir in späteren Schritten noch benötigen. Danach erstellen wir mit openssl den Key. Wobei domain-name.key natürlich durch den echten Namen ersetzt werden sollte. Ob 1024 bit genug sind, müsst Ihr selbst entscheiden, genauso was Ihr bei den einzelnen Punkten des Schlüssels angebt!

cd /root/
mkdir ssl
cd ssl
openssl genrsa -out domain-name.key 1024

Danach wird für das Zertifikat ein „Certificate Signing Request“ generiert:

openssl req -new -key domain-name.key -out domain-name.csr

Zur kurzen Kontrolle kann man überprüfen obs stimmt:

openssl req -noout -text -in domain-name.csr

Nun muß man das Zertifikat noch signieren:

openssl x509 -req -days 365 -in domain-name.csr -signkey domain-name.key -out domain-name.crt

Das war es auch schon, das Zertifikat ist Euer! Weiter gehts mit…

Apache SSL Modul (mod_ssl) aktivieren

Entweder man aktiviert es manuell, indem man einen Softlink setzt:

cd /etc/apache2/mods-enabled/
ln -s ../mods-available/ssl.conf ssl.conf
ln -s ../mods-available/ssl.load ssl.load

oder indem man a2enmod nutzt:

sudo a2enmod ssl

Als nächstes muß man…

Apaches SSL Port öffnen

Damit der Apache auf dem SSL Port 443 auch Anfragen entgegen nimmt, muß dies einmalig aktiviert werden in der Datei /etc/apache2/ports.conf.

Das Listen aktiviert Ihr durch den folgenden Code:

Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

Jetzt wollen wir dem Apache eine Lernphase gönnen und aktivieren die vorher gemachten Einstellungen durch einen Neustart mittels:

/etc/init.d/apache2 restart

Eventuell reicht auch ein /etc/init.d/apache2 force-reload, hab ich aber nicht getestet.

Fast fertig, jetzt muß man nur noch…

SSL für den Virtual Host aktivieren

Da der Rest nur Config Kram ist, sollte ein Code Beispiel eigentlich am hilfreichsten sein:

NameVirtualHost *:443

<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /root/ssl/domain-name.crt
SSLCertificateKeyFile /root/ssl/domain-name.key

ServerAdmin root@localhost
ServerName localhost

DocumentRoot /var/www/domain-name/
</VirtualHost>

Erstellt die VirtualHost Konfiguration unter /etc/apache2/sites-available/domain-name und verlinkt diese danach noch:

vim /etc/apache2/sites-available/domain-name
cd /etc/apache2/sites-enabled/
ln -s /etc/apache2/sites-available/domain-name .

Nochmal Apaches Konfiguration neuladen:

/etc/init.d/apache2 reload

Und schon solltet Ihr SSL auf Eurem VirtualHost nutzen können!