Von Kevin Papst • 05.07.2009 • 5 Kommentare
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.
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...
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...
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...
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!
die init.d Startskripte musst Du nicht anpassen, nur die Apache Config. Wie das geht, kann sich allerdings Distributionsabhängig unterscheiden.
http://httpd.apache.org/docs/2.2/mod/core.html#ifdefine
Im Moment hab ich es so eingerichtet, dass das Zertifikat für die Subdomain eingerichtet ist, aber dummer weise kommt man mit https://maindomain auch auf die Subdomainseite...
Ein ähnliches Problem hab ich auch.
Habe
phpmyadmin..de
und
webmail..de
eingerichet. Beim Aufruf von webmail.... bekomme ich den Inhalt von phpmyadmin...