J'ai un serveur Ubuntu 12.04.2 LTS exécutant Apache 2.2.22 avec mod_ssl et OpenSSL v1.0.1.
Dans ma configuration vhosts (tout le reste dans lequel se comporte comme je m'y attendais), j'ai la SSLProtocol
ligne avec -all +SSLv3
.
Avec cette configuration, TLS 1.1 et 1.2 sont activés et fonctionnent correctement - ce qui est contre-intuitif pour moi, car je m'attends à ce que seul SSLv3 soit activé dans cette configuration.
Je peux activer / désactiver TLSv1 très bien avec -/+TSLv1
, et cela fonctionne comme prévu. Mais +/-TLSv1.1
et +/-TLSv1.2
ne sont pas des options de configuration valides - donc je ne peux pas les désactiver de cette façon.
Quant à la raison pour laquelle je voudrais faire cela - j'ai affaire à une application tierce (sur laquelle je n'ai aucun contrôle) qui a un comportement de bogue avec les serveurs compatibles TLS, et je dois la désactiver complètement pour aller de l'avant.
Réponses:
Intrigué par ce bogue (et oui, j'ai pu le reproduire), j'ai jeté un œil au code source de la dernière version stable de
mod_ssl
et trouvé une explication. Restez avec moi, ça va devenir amateur-stack-overflowish:Lorsque le
SSLProtocol
a été analysé, il en résultechar
quelque chose comme ceci:Lors du lancement d'un nouveau contexte de serveur, TOUS les protocoles disponibles seront activés, et ce qui précède
char
est inspecté à l'aide de quelques opérations ET au niveau du bit astucieux pour déterminer quels protocoles doivent être désactivés . Dans ce cas, où SSLv3 est le seul protocole à avoir été explicitement activé, les 3 autres seront désactivés.OpenSSL prend en charge un paramètre de protocole pour TLSv1.1, mais comme le
SSLProtocol
ne prend pas en compte ces options, il n'est jamais désactivé. OpenSSL v1.0.1 a quelques problèmes connus avec TLSv1.2 mais s'il est pris en charge, je suppose que c'est la même chose pour TLSv1.1; il n'est pas reconnu / géré par mod_ssl et donc jamais désactivé.Références du code source pour mod_ssl:
SSLProtocol
est analysé à la ligne 925 danspkg.sslmod/ssl_engine_config.c
Les options utilisées dans la fonction ci-dessus sont définies à la ligne 444 dans
pkg.sslmod/mod_ssl.h
Tous les protocoles sont activés à la ligne 586,
pkg.sslmod/ssl_engine_init.c
après quoi des protocoles spécifiques sont désactivés sur les lignes suivantesComment le désactiver alors?
Vous avez quelques options:
Protocols All,-TLSv1.1,-TLSv1.2
mod_ssl
;-)la source
openssl.cnf
- l'emplacement dépend de l'installation. Sur Debian Squeeze, je l'ai trouvé sur/etc/ssl/openssl.cnf
, dans OS X/System/Library/OpenSSL/openssl.cnf
et sur Windows 7%systemdrive%\openssl\openssl.cnf
.SSLProtocol
de la même manière ci-dessus (SSLProtocol All -TLSv1.1 -TLSv1.2
(aucune virgule ne devrait être nécessaire)) mais sous une configuration Apache globale ou spécifique pour 'remplacer' toute configuration globale SSL mentionnée ci-dessus. (Si vous ne souhaitez pas modifier tous les chiffrements SSL sous-jacents -> Puisque le chiffrement dont vous avez besoin est considéré comme faible.)Le problème est également abordé dans les commentaires sur la page Apache mod_ssl: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136
Si Ubuntu 12.04 avait Apache 2.2.23, le problème ne se serait pas produit. Selon les commentaires, il est possible d'activer TLSv1.1 et TLSv1.2, mais TLSv1.0 est alors également activé:
la source
Tout d'abord, vous devez identifier quel est le vhost par défaut pour le port 443 de votre serveur (le premier vhost SSL chargé par Apache) et éditer son fichier de configuration. La plupart des utilisateurs ont un fichier ssl.conf sur leurs serveurs, avec un vhost pour le port 443 qui y est configuré. Comme le nom de ce fichier commence par "s", il se charge avant les vhosts configurés dans vhosts.conf (qui commence par "v"). Donc, vérifiez si c'est votre cas (la réponse est "oui" pour pratiquement tout le monde) et modifiez les protocoles dans ce fichier . C'est assez!
Un problème similaire a été publié ici: Comment désactiver TLS 1.1 & 1.2 dans Apache? . Selon HBruijn:
Et un autre ici: Est-il possible de définir un protocole SSL dans Apache pour un seul VirtualHost (caniche)? . Selon vallismortis:
Soit dit en passant: le vhost par défaut dans un serveur, pour un port donné, est celui qui répond aux demandes pour ce port, qui arrivent au serveur sans identification de nom de serveur (ou avec un nom de serveur incorrect). Exemple: une IP tapée dans la barre d'adresse de votre navigateur ou une redirection erronée provoquée par une table DNS incorrecte.
la source