Apache: VirtualHost über SSL?

Chino

Erfahrenes Mitglied
Guten Tag Forum!

Ich hab hier lokal Apache 2.0.48 als Entwicklungs-Server laufen. mod_ssl 2.0.48 und OpenSSL 0.9.7c sind ebenfalls installiert (komplettes apachefriends.org Paket).

Für den Apache hab ich mehrere Virtual Hosts eingerichtet:

Auszug aus der httpd.conf:

Code:
Listen 80
Listen 443
Listen 2000
Listen 2001
# usw für die verschiedenen Webs
Und dann noch am Ende der jeweilige Eintrag für den VirtualHost:

Code:
<VirtualHost localhost:2000>
    ServerAdmin meine_tolle@email.de    
    DocumentRoot E:/xampp/htdocs/smarty/htdocs
    ServerName localhost
</VirtualHost>

<VirtualHost localhost:2001>
    ServerAdmin meine_tolle@email.de
    DocumentRoot E:/xampp/htdocs/adodb/htdocs
    ServerName localhost
</VirtualHost>
So, ich möchte jetzt noch gerne, dass ein Virtual Host über SSL erreichbar ist. Bisher ist ja nur der Standard Port 443 für SSL eingerichtet.

Also, schnell ssl.conf geöffnet und folgendes eingetragen:

Code:
<VirtualHost localhost:2000>
DocumentRoot "E:/xampp/htdocs/smarty/htdocs"
ServerName localhost
ServerAdmin meine_tolle@email.de
ErrorLog logs/sslerror.log
TransferLog logs/sslaccess.log
SSLEngine on
SSLCertificateFile "E:/xampp/apache/conf/ssl.crt/server.crt"
SSLCertificateKeyFile "E:/xampp/apache/conf/ssl.key/server.key"
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
</VirtualHost>
So, Apache direkt neu gestartet; beim starten selbst treten keine Fehlermeldungen auf, ergo wurde Apache ordunungsgemäßg neu gestartet.

Wenn ich jetzt allerdings die URL http://localhost:2000 aufrufe, erhalte ich einen 400 Fehler ("Bad request! Your browser (or proxy) sent a request that this server could not understand."). Rufe ich jedoch die URL https://localhost:2000 auf, funktioniert es wie erwartet. Sprich: SSL an sich geht, rufe ich die Seite jedoch nicht über SSL auf, geht es nicht.

Ein Blick ins sslerror.log sagt mir folgendes:

[Tue Jul 13 17:31:35 2004] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
Wenn ich jetzt wieder in der ssl.conf den Eintrag

Code:
<VirtualHost localhost:2000>
in folgendes
Code:
<VirtualHost _default_:2000>
ändere (wie es auch für den bereits konfigurierten Standard-Host (Port 443) eingetragen ist), dann kann ich wie gewohnt normal über http://localhost:2000 zugreifen. Rufe ich die Seite jetzt aber über SSL auf, dann erhalte ich eine normale Fehlerseite "Server wurde nicht gefunden".

Steh jetzt gerad etwas auf dem Schlauch. Könnte mir also jemand freundlicherweise verraten, wie ich für einen VirtualHost SSL eingerichtet bekomme ich den jeweiligen Virtual Host aber trotzdem noch normal über http erreiche? :)

Thx,
Chino
 

Chino

Erfahrenes Mitglied
Ok, das Problem ist gelöst :)

Hier ein kleines How-To:

1) Ordnerstruktur für Virtual Hosts anlegen

Das Paket von apachfriends.org wurde unter E:\xampp installiert.

Demnach ergeben sich folgende Pfade:

Code:
Apache:                 E:\xampp\apache
Document Root:          E:\xampp\htdocs
Virtual-Host Webs:      E:\xampp\htdocs\vhost\htdocs
Virutal-Host Logs:      E:\xampp\htdocs\vhost\logs
2) hosts-Datei anpassen

Ins Verzeichnis x:\Windows\system32\driver\etc wechseln (x steht hierfür für den Laufwerksbuchstaben, auf dem Windows installiert wurde. Unter Windows 98 könnte der Pfad anders aussehen).

Dann die Datei hosts mit einemTexteditor öffnen. In der letzten Zeile sollte folgendes stehen:

Code:
127.0.0.1       localhost
Jetzt einfach eine weitere Zeile einfügen:

Code:
127.0.0.1       vhost
und die Datei abspeichern.

Der Name vhost kann natürlich nach belieben angepasst werden. Dient nur als Beispiel :)

3) Apache-Konfiguration anpassen

In das Apache-Verzeichnis wechseln. Im Unterordner conf die Datei httpd.conf mit einem Texteditor öffnen.

Ziemlich weit oben solle ein Eintrag stehen, der wie folgt ausschaut:

Code:
Listen 80
Listen 443
Hier wird dem Apache mitgeteilt, auf welche Ports er hören soll. Port 80 ist der Standard-Port für das HTTP-Protokoll und der Port 443 für SSL. Diese beiden Ports müssen beim Aufruf nicht explizit mitangegeben werden.

Dann bis zum Ende der Datei scrollen bis zum Abschnitt Virtual Host

Hier steht folgender auskommentierter Eintrag:

Code:
#NameVirtualHost *
Darunter werden jetzt folgende zwei Zeilen eingefügt:

Code:
NameVirtualHost vhost:80
NameVirtualHost vhost:443
Hier muss _exakt_ der gleiche Name angegeben werden, der auch in der hosts-Datei eingetragen wurde, sonst funktioniert es nicht.

Dann, ein paar Zeilen weiter unten, wird jetzt der ensprechende Virtual Host konfiguriert.

Code:
<VirtualHost vhost:80>
    ServerAdmin meine@email.de 
    DocumentRoot E:/xampp/htdocs/vhost/htdocs
    ServerName vhost
    CustomLog E:/xampp/htdocs/vhost/logs/access.log common
    ErrorLog E:/xampp/htdocs/vhost/logs/error.log
</VirtualHost>
Und dann nochmal mit SSL-Unterstützung:

Code:
<VirtualHost vhost:443>
    ServerAdmin meine@email.de
    DocumentRoot E:/xampp/htdocs/vhost/htdocs	
    ServerName vhost
    CustomLog E:/xampp/htdocs/vhost/logs/ssl_access.log common
    ErrorLog E:/xampp/htdocs/vhost/logs/ssl_error.log    
    SSLEngine on
    SSLCertificateFile "E:/xampp/apache/conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "E:/xampp/apache/conf/ssl.key/server.key"
</VirtualHost>
Hier muss eventuell der Pfad zu den SSL-Zertifikaten angepasst werden.

4) Apache neu starten

Jetzt muss der Apache nur noch neu gestartet werden.

Et voila: Nach dem Neustart kann der Virtual Host über http://vhost bzw https://vhost aufgerufen werden. :)
 

hallomike

Grünschnabel
hi chinol,

vielleicht kannst Du mir ja helfen.

Dein post - Apache: VirtualHost über SSL? - ist ziemlich gut.
hilft wirklich weiter.
bin schon lang auf der such nach so einer erklaerung.

aber wi hast Du
mod_ssl 2.0.48 und OpenSSL 0.9.7c unter windows
bei Dir installiert

ich habe win 2000 mit dem easyphp packet
apache 1.3.24
php 4.2.0
mysql 3.23.49
phpmyadmin 2.2.6

kannst Du mir helfen?

Danke - fuer Deine antwort.

mfg, mike