_default_ VirtualHost se superpone en el puerto 443, el primero tiene prioridad

64

Tengo dos aplicaciones de ruby ​​on rails 3 que se ejecutan en el mismo servidor (ubuntu 10.04), ambas con SSL.

Aquí está mi archivo de configuración de 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>

Cual es el problema:

Al reiniciar mi servidor, me da un resultado como este:

 * 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

Al buscar en Google por qué viene este problema, obtuve algo como esto:

No puede usar hosts virtuales basados ​​en nombres con SSL porque el protocolo de enlace SSL (cuando el navegador acepta el certificado del servidor web seguro) ocurre antes de la solicitud HTTP, que identifica el host virtual basado en nombres apropiado. Si planea utilizar hosts virtuales basados ​​en nombres, recuerde que solo funcionan con su servidor web no seguro.

Pero no puedo descubrir cómo ejecutar dos aplicaciones SSL en el mismo servidor.

¿Alguien puede ayudarme?

Mohit Jain
fuente
55
No tiene _default_vhosts en la configuración que ha proporcionado, por lo que están en otro lugar. ¿Cuál es el resultado de apache2ctl -S? (Sí, es posible ejecutar múltiples vhosts basados ​​en nombres SSL en diferentes certificados, siempre que no tenga necesidad de admitir navegadores de clientes que ejecuten Windows XP o cualquier otro que no admita TLS SNI. ¿Necesita admitir Windows? XP?)
Shane Madden

Respuestas:

87

Ya casi!

Agregue esto a ports.conf o http.conf y mantenga su configuración anterior.

<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
fuente
! El comentario "# importante debe ser eliminado o movido a otra línea De lo contrario, muchas gracias para la interpretación de este mensaje de error inexacto para mí..
flickerfly
3
Esto ya no funciona en Apache 2.4.7
malhal
Gracias. Descubrí que necesitaba comentar Listen 443 porque eso también se está utilizando en mis configuraciones conf.d / website.conf individuales
dlink
3

También me ayudó a ejecutar "/ usr / sbin / apachectl -S". Esta salida de comando muestra DOS archivos "ssl.conf" en la misma ruta. Mueva o elimine el archivo delincuente y todo debería funcionar después.

Robert
fuente
1

Puede agregar esto a su configuración de apache en /etc/apache2/ports.conf:

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

(Esto funciona en ambos: apache 2.2 y 2.4)

rubo77
fuente