web-dev-qa-db-fra.com

Apache Sni Namevhosts achète toujours à la première entrée virtuelle

Apache semble aligner toutes les demandes HTTPS au premier <VirtualHost *:443> Quelle que soit la correspondance SNI sur les champs ServerName/Serveralias.

Apache est construit avec SNI
Version du serveur: Apache/2.2.22 (Ubuntu)
Server construit: MAR 8 2013 15:53:13
[.____] OpenSSL 1.0.1 14 mars 2012

eRROR.LOG Rapports:

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

Qui suggère que SNI fonctionne selon http://wiki.apache.org/httpd/namebasedsslvhostswithsni (Comment pouvez-vous dire si votre construction Apache prend en charge SNI?)

SSL_TLS_SNI Semble être défini de manière appropriée lorsque demandé à l'aide de HTTPS (vérifié avec phpinfo())

Configuration:

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

-- https://server.com et https://alias.com Essayez de servir le certificat (et le contenu si vous ignorez le certificat Avertissement) de Server.com

La configuration similaire fonctionne bien en utilisant http: 80 (seul changement est SSLENGINE sur et les chemins de certificat/clés)

Si je détache le premier hôte virtuel (restreindre l'accès HTTPS aux sites définis), je reçois toujours une erreur SSL (même s'il s'agit d'un site défini))

Merci

Edit:
Drapeaux supplémentaires

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

SSLStrictSNIVHostCheck on Donc, il ne faut donc pas prendre en charge les navigateurs activés SNI de toute façon

Apache2ctl -S Sortie:

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

Mise à jour

Donc, pour une étrange raison, le problème semble avoir résolu lui-même.
Peut-être que c'est une sorte d'étrange problème de mise en cache ou quelque chose (bien que j'ai Apache2ctl stop/start/restart et Sudo service Apache2 stop/start/restart/reloadlevé plusieurs fois et avez effectué des tests localement sur le serveur ainsi que plusieurs machines différentes).

N'hésitez pas à prendre cette question ou à le laisser si elle sert une sorte de référence.
Merci pour votre aide, vous tous!

4
arcyqwerty

Votre configuration semble ok; La directive SSLENGINE ON a été incluse; Selon le message du journal, on dirait que le problème vient du côté du client.

Tous les clients ne soutiennent pas SNI, mais la plupart d'entre eux font. Cela dépend de la manière dont la négociation SSL est faite, par le système (ne fonctionne pas sur Win XP alors) ou par le navigateur (la version doit être suffisamment récente). Regardez Liste des navigateurs avec support Sni . Si vous devez vous assurer que tous les clients obtiennent accès à vos sites Web, vous ne pouvez pas utiliser SNI en raison de ces anciennes versions (du navigateur ou du système). Vous auriez besoin d'une adresse IP par ServerName et utilisez virtualhost $ IP_ALIAS: 443 pour serveurName Alias.com et VirtualHost $ IP_Server: 443 pour serveurName Server.com au lieu de VirtualHost *: 443 pour les deux.

1
philippe

Vous obtenez une erreur avec le premier hôte virtuel car, n'ayant pas inclus le SSLEngine on Directive, Apache envoie une réponse HTTP sans SSL. Si vous souhaitez ce type de fonctionnalité, vous devez configurer un autre site (éventuellement avec un autre certificat, sauf si vous réutilisez un domaine existant) pour votre Vhost par défaut, même si tout ce que vous voulez faire est de renvoyer une belle erreur.

Vérifiez peut-être que les certificats sont en réalité différents? Votre configuration apparaît correcte.

Vérifiez également qu'il n'y a pas d'autre d'autres sections VirtualHost sections à l'écoute du port 443. Apache sélectionnera le meilleur correspondant, ce qui signifie que si quelque chose est plus spécifique à l'adresse indiquée par la connexion, cette entrée prendra priorité. Je ne pense pas que ce soit votre problème, cependant.

De plus, en tant que point d'intérêt, ce que vous voyez du côté de l'utilisateur, c'est ce qui se produirait si le client n'a pas soutenu SNI dans la plupart des cas.

0
Falcon Momot