Cómo ajustar Apache para que muestre solo un host en el protocolo HTTPS

Cómo ajustar Apache para que muestre solo un host en el protocolo HTTPS

Tengo un servidor web Apache en FreeBSD y quiero vincular SSL sólo a uno de muchos dominios. Ahora mi configuración es

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

Todo bien, pero en el navegador activado.https://www.dominio01.com/muestra las páginas del sitio ssldomain.com. Es malo.

¿Cómo puedo ajustar Apache para evitar que se muestren páginas de ssldomain.com enhttps://www.dominio01.comen el navegador.

UPD: Estaba intentando definir VirtualHosts: 80 y: 443 para ambos dominios. 1) utilizar SSL original de ssldomain.com para ambos dominios; 2) usar SSL original para ssldomain.com y SSL autofirmado para domain01.com. En ambos casos, el navegador muestra un error de certificado en HTTPS pero las páginas son correctas.

Configuración para estos dos casos.

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/ssl/domain01.com/server.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/domain01.com/server.key"
# This is for second case (of course 2 lines above are comments)
# SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
# SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
# SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

#Redirect permanent / http://www.domain01.com/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

¡Con los mejores deseos!

Respuesta1

Apache utilizará de forma predeterminada el primer vhost para esa IP (o comodines que coincidan como * en este caso) y el puerto (443) si no puede encontrar un vhost con un ServerName o ServerAlias ​​coincidente. Por lo tanto, debe configurar un sitio separado para www.domain01.com en el puerto 443, tal como lo hizo con www.ssldomain.com:443 para que no recurra al único que tiene como predeterminado.

Este vhost se puede configurar para redirigir nuevamente a HTTP si lo desea (tenga en cuenta que esta redirección se realizadespuésla negociación SSL aún requiere un certificado válido (cada host virtual SSL requiere que se configure un certificado, aunque puede usar el mismo certificado si también es válido para ese host virtual).

En ese punto, ¿cómo es posible que no reciba un error de certificado?https://www.dominio01.com? Supongo que es así (y solo si lo ignora verá el contenido de www.ssldomain.com), o su certificado cubre ambos dominios (en cuyo caso, configurarlo como un vhost separado y redirigir nuevamente a http es definitivamente el camino a seguir).

Por cierto, contrariamente a la creencia popular, sí lo haces.noNecesita una dirección IP separada para configurar múltiples hosts SSL en la instancia de Apache, incluso para navegadores antiguos que no admiten SNI. Hay otra solución. Consulte aquí para obtener más detalles:Deshabilitar SNI para virtualhost específico en Apache

Respuesta2

Esto funciona para mí, solo cambio el orden de los dominios: el primero es ssldomain.com con el certificado SSL original y el segundo es domain01.com con el mismo certificado SSL y redireccionamiento.

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

Redirect permanent / http://www.domain01.com/
</VirtualHost>

Un agradecimiento especial a @BazzaDP.

información relacionada