Vous ne pouvez définir le protocole SSL que pour le premier VirtualHost dans le fichier de configuration. Toutes les entrées VirtualHost suivantes hériteront de ce paramètre de la première entrée et ignoreront silencieusement leur propre paramètre en raison d'un bogue OpenSSL .
Il existe un rapport de bogue correspondant pour mod_ssl , mais comme décrit dans le rapport de bogue, le problème doit être résolu dans OpenSSL (le certificat est hérité mais pas les protocoles).
Les suites de chiffrement doivent être définies indépendamment pour chaque VirtualHost, sinon vous vous retrouverez avec la liste par défaut, y compris beaucoup de chiffrements non sécurisés. Sachez également que les anciens clients qui ne prennent pas en charge l'indication de nom de serveur (SNI) utiliseront toujours l'hôte par défaut (sauf s'ils sont bloqués à l'aide deSSLStrictSNIVHostCheck
), ce qui peut perturber vos tests.
En bref, vous devriez pouvoir spécifier des suites de chiffrement et des certificats personnalisés pour chaque hôte virtuel, mais tant que le bogue n'est pas corrigé, ne vous attendez pas à un comportement correct avec des protocoles personnalisés pour chaque hôte virtuel.
J'ai rencontré ce problème avec Apache 2.4 et modssl avec OpenSSL 1.0.1k, et je m'attends à ce qu'Apache 2.2 soit soumis aux mêmes problèmes.
Mise à jour (octobre 2016): le bogue OpenSSL a été marqué comme résolu le 13 octobre 2016. Cependant, il faisait partie d'une fermeture en masse de problèmes ouverts et bien qu'un «correctif partiel» ait été fourni, le problème n'a jamais été entièrement résolu.
Mise à jour (avril 2018): le bogue OpenSSL soumis à nouveau dispose désormais d'un correctif (à compter du 9 avril 2018). Ce correctif changera le comportement des instances Apache configurées avec plusieurs hôtes virtuels SNI:
Refuser les connexions non conformes au protocole SSL vhost
Ceci a été développé et testé avec 2.4.27 et en production avec cette version. Le patch a été modifié pour 2.4.33 et légèrement testé.
Cela vérifie la version de la connexion par rapport au protocole SSL configuré pour l'hôte virtuel qui est mis en correspondance en fonction du SNI. Étant donné que la connexion est initialement établie avec le protocole SSL configuré pour l'hôte par défaut du port, l'hôte par défaut doit inclure tous les protocoles qui seront pris en charge par n'importe quel hôte virtuel.
Ce correctif ajoute un état de retour supplémentaire APR_EMISMATCH à la fonction init_vhost afin que le rappel ssl_callback_ServerNameIndication enregistré avec OpenSSL puisse renvoyer l'alerte fatale SSL_AD_PROTOCOL_VERSION. Ceci est destiné à produire la même réponse au ClientHello que d'avoir un protocole SSL spécifié qui n'inclut pas la version en question. Parce que le rappel SNI est appelé pendant le traitement du ClientHello et avant qu'une réponse ne soit produite, il semble faire exactement cela.
Si vous voyez soudain des messages du format suivant:
Rejecting version [version] for servername [hostname]
Ensuite, vous devez vérifier votre SSLProtocol
hôte par défaut.
SSLStrictSNIVHostCheck
sont très appréciées. Cependant, il convient également de noter à partir de la documentation citée que si cette option est activée sur tout autre hôte virtuel, les clients ignorant SNI ne sont pas autorisés à accéder à cet hôte virtuel particulier .