# Apache: VirtualHost über SSL?



## Chino (13. Juli 2004)

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*:


```
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:


```
<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:


```
<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 http*s*://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


```
<VirtualHost localhost:2000>
```
in folgendes 
	
	
	



```
<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 (14. Juli 2004)

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:


```
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:


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


```
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:


```
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:


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


```
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.


```
<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:


```
<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 (16. August 2004)

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


----------

