_default_ VirtualHost se chevauchent sur le port 443, le premier a la priorité

64

J'ai deux applications ruby ​​on rails 3 qui s'exécutent sur le même serveur (Ubuntu 10.04), toutes deux avec SSL.

Voici mon fichier de configuration apache:

<VirtualHost *:80>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example1/production/shared/example1.crt
SSLCertificateKeyFile /home/me/example1/production/shared/example1.key
SSLCertificateChainFile /home/me/example1/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>


<VirtualHost *:80>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example2/production/shared/iwanto.crt
SSLCertificateKeyFile /home/me/example2/production/shared/iwanto.key
SSLCertificateChainFile /home/me/example2/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>

Quel est le problème:

Au redémarrage de mon serveur, cela me donne un résultat comme ceci:

 * Restarting web server apache2                                   
 [Sun Jun 17 17:57:49 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
 ... waiting [Sun Jun 17 17:57:50 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence

En cherchant sur Google pourquoi cette question est à venir, j'ai obtenu quelque chose comme ceci:

Vous ne pouvez pas utiliser d'hôtes virtuels basés sur le nom avec SSL car la négociation SSL (lorsque le navigateur accepte le certificat du serveur Web sécurisé) se produit avant la demande HTTP, qui identifie l'hôte virtuel basé sur le nom approprié. Si vous envisagez d'utiliser des hôtes virtuels nommés, rappelez-vous qu'ils ne fonctionnent qu'avec votre serveur Web non sécurisé.

Mais pas en mesure de comprendre comment exécuter deux applications SSL sur le même serveur.

Quelqu'un peut-il m'aider?

Mohit Jain
la source
5
Vous n'avez aucun _default_hôte virtuel dans la configuration que vous avez fournie, ils sont donc ailleurs. Quelle est la sortie de apache2ctl -S? (Oui, il est possible d'exécuter plusieurs hôtes virtuels basés sur des noms SSL sur différents certificats, à condition que vous n'ayez pas besoin de prendre en charge les navigateurs clients exécutant Windows XP ou tout autre système qui ne prend pas en charge TLS SNI. Avez-vous besoin de prendre en charge Windows? XP?)
Shane Madden

Réponses:

87

Presque là!

Ajoutez ceci à ports.conf ou http.conf et conservez la configuration ci-dessus.

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

    # !important below!
    NameVirtualHost *:443 
    Listen 443
</IfModule>
Daniel T. Magnusson
la source
Le commentaire "#! Important! Doit être supprimé ou déplacé vers une autre ligne. Sinon, merci beaucoup d'avoir interprété ce message d'erreur inexact pour moi.
flickerfly
3
Cela ne fonctionne plus dans Apache 2.4.7
malhal
Je vous remercie. J'ai trouvé que je devais commenter Listen 443 parce que c'est également utilisé dans mes configs individuels conf.d / website.conf
dlink
3

Cela m'a également aidé à exécuter "/ usr / sbin / apachectl -S". Cette commande exit affiche DEUX fichiers "ssl.conf" sur le même chemin. Déplacez ou supprimez le dossier du délinquant et tout devrait fonctionner après.

Robert
la source
1

Vous pouvez ajouter ceci à votre configuration apache à l'adresse suivante /etc/apache2/ports.conf:

<IfModule mod_ssl.c>                
    Listen 443                      
    <IfModule !mod_authz_core.c>    
        # Apache 2.2                
        NameVirtualHost *:443       
    </IfModule>                     
</IfModule>                         

(Cela fonctionne dans les deux versions: apache 2.2 et 2.4)

rubo77
la source