Apache
Virtual Hosts mit SSL
Echte IP-based Virtual Hosts
Die beliebten named-based Virtual Hosts lassen sich eigentlich mit SSL nicht verwenden (Begründung siehe hier). Man muss also pro Virtual Host eine separate IP-Adresse verwenden, z.B. durch Zuweisung einer Alias-IP-Adresse und (bei NAT) Umleitung eines zusätzlichen Ports vom Router.
Die Konfig sieht dann so aus:
<IfDefine SSL> <IfDefine !NOSSL> <Directory "/srv/www/vhosts/server1"> Options None AllowOverride AuthConfig Order allow,deny Allow from all </Directory> <Directory "/srv/www/vhosts/server2"> Options None AllowOverride AuthConfig Order allow,deny Allow from all </Directory> <VirtualHost 1.1.1.1:443> ... DocumentRoot "/srv/www/vhosts/server1" ... SSLCertificateFile /etc/apache2/ssl.crt/server1.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server1.key ... </VirtualHost> <VirtualHost 1.1.1.2:443> ... DocumentRoot "/srv/www/vhosts/server2" ... SSLCertificateFile /etc/apache2/ssl.crt/server2.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server2.key ... </VirtualHost> </IfDefine> </IfDefine>
Vorteil: Man kann jedem Virtual Host eigene Keys und SSL-Zertifikate zuordnen.
Named-based Virtual Hosts
Es ist jedoch mit named-based Virtual Hosts zumindest möglich, Server mit verschiedenen DocumentRoot Verzeichnissen aufzusetzen . Allerdings wird dabei immer nur das SSL-Zertifikat des ersten Hosts verwendet, da der Host-Header erst nach dem SSL-Handshake ausgewertet wird (so dass es am Client ggf. eine Fehlermeldung gibt).
Die Konfig sieht dann so aus:
NameVirtualHost *:443
<IfDefine SSL> <IfDefine !NOSSL> <Directory "/srv/www/vhosts/server1"> Options None AllowOverride AuthConfig Order allow,deny Allow from all </Directory> <Directory "/srv/www/vhosts/server2"> Options None AllowOverride AuthConfig Order allow,deny Allow from all </Directory> <VirtualHost *:443> ... DocumentRoot "/srv/www/vhosts/server1" ... SSLCertificateFile /etc/apache2/ssl.crt/server1.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server1.key ... </VirtualHost> <VirtualHost *:443> ... DocumentRoot "/srv/www/vhosts/server2" ... SSLCertificateFile /etc/apache2/ssl.crt/server1.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server1.key ... </VirtualHost> </IfDefine> </IfDefine>
SSL-Proxy
Das Problem mit mehreren IP-Adressen kann man umgehen, wenn man das Modul mod_rewrite einsetzt, um einen "SSL-Proxy" zu bauen. Siehe z.B. http://www.serversupportforum.de/forum/faqs-anleitungen/2558-howto-ssl-proxy.html.
Nachteil: Unschöne URLs.
mod_rewrite
Alle Zugriffe von Port 80 auf Port 443 (SSL) umleiten
RewriteEngine on RewriteCond %{SERVER_PORT} =80 RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI}
Ein / am Ende der URL einfügen
RewriteEngine on RewriteRule ^/url$ http://www.mydomain.de/url/ [R]