Marc Reichelt: Eine Lösung

Beitrag lesen

Hallo Vinzenz,

<zitat>
    Namensbasierte virtuelle Hosts können aufgrund der Natur des SSL-Protokolls
    nicht mit SSL-gesicherten Servern verwendet werden.
</zitat>

Nun ja, das ist nicht ganz korrekt, denn gesichert werden können sie (ich habe es bei meinem aktuellen Server ja auch mit https://ssl.example.net/ geschafft). Allerdings verstehe ich jetzt wieder, welches Problem hier auftritt: Der Hostname ist nicht bekannt, wenn eine mit SSL verschlüsselte Seite aufgerufen wird.

Ich habe nun folgende Einträge in meine Datei /etc/apache2/sites-available/default hinzugefügt:

NameVirtualHost *:443  
<VirtualHost _default_:443>  
        ServerAdmin webmaster@localhost  
        ServerName  localhost:443  
  
        DocumentRoot /var/www/  
        <Directory />  
                Options FollowSymLinks  
                AllowOverride None  
        </Directory>  
        <Directory /var/www/>  
                Options Indexes FollowSymLinks MultiViews  
                AllowOverride None  
                Order allow,deny  
                deny from all  
        </Directory>  
  
        ErrorLog /var/log/apache2/error.log  
        LogLevel warn  
        CustomLog /var/log/apache2/access.log combined  
  
        SSLEngine On  
        SSLCertificateFile /etc/ssl/certs/server.crt  
        SSLCertificateKeyFile /etc/ssl/private/server.key  
        SSLCertificateChainFile /etc/ssl/certs/cacert.crt  
  
        ServerSignature Off  
</VirtualHost>

So bekommen zwar alle Domains bei Aufruf mit https:// eine "Forbidden"-Seite, und das Zertifikat ist eventuell nicht für die Domains ausgelegt (wie jetzt beispielsweise auf https://marcreichelt.de/) - aber es ist in Ordnung. Nun kann ich in den anderen VirtualHosts einzeln SSL freischalten - was bereits bei einem Host funktioniert.
Die Konfiguration dafür sieht so aus:

# Host: ssl.example.org  
<VirtualHost *:443>  
    ServerName ssl.example.org:443  
    ServerAdmin admin@example.org  
  
    DocumentRoot "/var/www/example"  
    <Directory "/var/www/example">  
        Options -Indexes  
        AllowOverride All  
  
        Order allow,deny  
        Allow from All  
   </Directory>  
  
   SSLEngine On  
   SSLCertificateFile /etc/ssl/certs/server.crt  
   SSLCertificateKeyFile /etc/ssl/private/server.key  
   SSLCertificateChainFile /etc/ssl/certs/cacert.crt  
</VirtualHost>

Entscheidend ist dabei die Portangabe bei "ServerName ssl.example.org:443".
Um diese Erkenntnis zu erreichen war das Dokument VhostsApache sehr hilfreich (vor allem unten die Beispielkonfigurationen) - möge es für die Nachwelt auch hilfreich sein. :-)

Vielen Dank auch an dedlfx, der mich auf "_default_" gebracht hat, und an Vinzenz, der mich an das "chicken and egg"-Problem von SSL erinnert hat.

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)