Puede configurar SSLProtocol solo para el primer VirtualHost en el archivo de configuración. Todas las entradas posteriores de VirtualHost heredarán esa configuración de la primera entrada e ignorarán silenciosamente su propia configuración debido a un error de OpenSSL .
Hay un informe de error correspondiente para mod_ssl , pero como se describe en el informe de error, el problema debe resolverse en OpenSSL (el certificado se hereda pero no los protocolos).
Los conjuntos de cifrado se deben configurar de forma independiente para cada VirtualHost, de lo contrario, terminará con la lista predeterminada, que incluye muchos cifrados inseguros. Además, tenga en cuenta que los clientes más antiguos que no admiten la Indicación de nombre del servidor (SNI) siempre usarán el host predeterminado (a menos que se bloquee el usoSSLStrictSNIVHostCheck
), lo que puede confundir sus pruebas.
En resumen, debe poder especificar conjuntos de cifrado y certificados personalizados para cada host virtual, pero hasta que se solucione el error, no espere un comportamiento correcto con protocolos personalizados para cada host virtual.
Encontré este problema con Apache 2.4 y modssl con OpenSSL 1.0.1k, y espero que Apache 2.2 esté sujeto a los mismos problemas.
Actualización (octubre de 2016): el error de OpenSSL se marcó como resuelto el 13 de octubre de 2016. Sin embargo, fue parte de un cierre masivo de problemas abiertos y, aunque se proporcionó una 'solución parcial', el problema nunca se resolvió por completo.
Actualización (abril de 2018): el error de OpenSSL reenviado ahora tiene un parche disponible (a partir del 9 de abril de 2018). Este parche cambiará el comportamiento de las instancias de Apache configuradas con múltiples hosts virtuales SNI:
Rechazar conexiones que no se ajustan a vhost SSLProtocol
Esto fue desarrollado y probado con 2.4.27 y en producción con esa versión. El parche se modificó para 2.4.33 y se probó ligeramente.
Esto verifica la versión de la conexión con el protocolo SSL configurado para el host virtual que coincide con el SNI. Debido a que la conexión se realiza inicialmente con el protocolo SSL configurado para el host predeterminado para el puerto, el host predeterminado debe incluir todos los protocolos que serán compatibles con cualquier host virtual.
Este parche agrega un estado de retorno adicional de APR_EMISMATCH a la función init_vhost para que la devolución de llamada ssl_callback_ServerNameIndication registrada con OpenSSL pueda devolver la alerta fatal SSL_AD_PROTOCOL_VERSION. Esto tiene la intención de producir la misma respuesta al ClientHello que tener un protocolo SSL especificado que no incluye la versión en cuestión. Debido a que la devolución de llamada SNI se llama durante el procesamiento de ClientHello y antes de que se produzca una respuesta, parece hacer exactamente eso.
Si de repente ve mensajes con el siguiente formato:
Rejecting version [version] for servername [hostname]
Luego, debe verificar su SSLProtocol
host predeterminado.
SSLStrictSNIVHostCheck
es muy apreciada. Sin embargo, también debe tenerse en cuenta a partir de la documentación citada que si se establece en el de cualquier otra máquina virtual, los clientes desconocen SNI no se les permite acceder a este host virtual en particular .