fragen stichworte

Apache SNI namevhosts wird immer an den ersten VirtualHost-Eintrag weitergeleitet

Apache scheint alle https-Anforderungen an die erste <VirtualHost *:443> weiterzuleiten, unabhängig davon, ob SNI in den Feldern ServerName/ServerAlias ​​übereinstimmt.

Apache wird mit SNI
erstellt Serverversion: Apache/2.2.22 (Ubuntu)
Server gebaut: 8. März 2013 15:53:13
OpenSSL 1.0.1 14. März 2012

Fehlerprotokollberichte:

Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

Was bedeutet, dass SNI gemäß http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI funktioniert (Wie können Sie feststellen, ob Ihr Apache-Build SNI unterstützt?)

SSL_TLS_SNI scheint angemessen eingestellt zu sein, wenn mit HTTPS (verifiziert mit phpinfo())

angefordert wird

Konfiguration:

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in/etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:443
    Listen 443
</IfModule>

#<VirtualHost *:443>
#       <Location/>
#               Order allow,deny
#               Deny from all
#       </Location>
#</VirtualHost>

<VirtualHost *:443>
        SSLEngine on
        ServerAdmin webmaster@localhost
        ServerName server.com
        ServerAlias server.com
        DocumentRoot/web/default
        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile/path/server.com.crt
        SSLCertificateKeyFile/path/server.com.key
</VirtualHost>
<VirtualHost *:443>
        SSLEngine on
        ServerAdmin webmaster@localhost
        ServerName alias.com
        ServerAlias alias.com
        DocumentRoot/web/default
        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile/path/alias.com.crt
        SSLCertificateKeyFile/path/alias.com.key
</VirtualHost>

Sowohl https://server.com als auch https://alias.com versuchen, das Zertifikat (und den Inhalt, wenn Sie die cert-Warnung ignorieren) von server.com bereitzustellen

Eine ähnliche Konfiguration funktioniert gut mit HTTP: 80 (nur Änderung ist SSLEngine und die Zertifikat-/Schlüsselpfade)

Wenn ich den ersten virtuellen Host auskommentiere (HTTPS-Zugriff auf definierte Sites beschränken), erhalte ich immer einen SSL-Fehler (auch wenn es sich um eine definierte Site handelt)

Vielen Dank

BEARBEITEN:
Zusätzliche Flags

SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLStrictSNIVHostCheck on
SSLVerifyClient none
SSLProxyEngine off

SSLStrictSNIVHostCheck on Es sollte also ohnehin nur SNI-fähige Browser unterstützt werden

apache2ctl -S Ausgabe:

*:443                  is a NameVirtualHost
         default server server.com (/etc/apache2/sites-enabled/000-default:22)
         port 443 namevhost server.com (/etc/apache2/sites-enabled/000-default:22)
         port 443 namevhost alias.com (/etc/apache2/sites-enabled/000-default:39)
         port 443 namevhost other.com (/etc/apache2/sites-enabled/other:22)

antworten

Aktualisieren

Aus irgendeinem seltsamen Grund scheint sich das Problem von selbst gelöst zu haben.
Vielleicht handelt es sich um eine Art seltsames Caching-Problem oder etwas (obwohl ich apache2ctl stop/start/restart und sudo service apache2 stop/start/restart/reload viele Male bearbeitet habe und lokal Tests auf dem Server durchgeführt habe sowie mehrere verschiedene Maschinen verwendet habe).

Fühlen Sie sich frei, diese Frage zu beantworten oder sie zu lassen, wenn sie als Referenz dient.
Danke für all die Hilfe Jungs!

Ihre Konfiguration sieht OK aus; Die Anweisung SSLEngine On wurde hinzugefügt; Laut der Protokollmeldung scheint das Problem von der Client-Seite zu kommen.

Nicht alle Clients unterstützen SNI, die meisten jedoch. Es hängt davon ab, wie die SSL-Verhandlung gemacht wird, vom System (funktioniert nicht unter Win XP) oder vom Browser (die Version muss neu genug sein). Sehen Sie sich die Liste der Browser mit Unterstützung von SNI an. Wenn Sie sicherstellen müssen, dass alle Clients Zugriff auf Ihre Websites erhalten, können Sie SNI aufgrund dieser alten Versionen (des Browsers oder des Systems) nicht verwenden. Sie benötigen eine IP pro ServerName und verwenden VirtualHost $ IP_alias: 443 für ServerName alias.com und VirtualHost $ IP_server: 443 für ServerName server.com anstelle von VirtualHost *: 443 für beide.

Sie erhalten einen Fehler beim ersten virtuellen Host, da Apache ohne die SSLEngine on -Direktive eine HTTP-Antwort ohne SSL sendet. Wenn Sie diese Art von Funktionalität möchten, müssten Sie eine andere Site (möglicherweise mit einem anderen Zertifikat, sofern Sie eine vorhandene Domäne nicht wiederverwenden) für Ihren Standard-vhost einrichten, selbst wenn Sie nur einen schönen Fehler zurückgeben möchten.

Vielleicht prüfen, ob die Zertifikate tatsächlich anders sind? Ihre Konfiguration scheint korrekt zu sein.

Überprüfen Sie auch, dass es keine anderen VirtualHost Sektionen gibt, die Port 443 abhören. Apache wählt die am besten passende Sektion aus, was bedeutet, dass, wenn etwas spezifischer für die Adresse ist, an der die Verbindung kam Vorrang. Ich denke nicht, dass das dein Problem ist.

Außerdem sehen Sie auf der Benutzerseite, was passieren würde, wenn der Client SNI in den meisten Fällen nicht unterstützt.