web-dev-qa-db-fra.com

Rétrocompatibilité TLS 1.2.

La question est la suivante: que se passe-t-il si le client ne prend en charge que TLS 1.1 et que le serveur a activé TLS1.2 ou SSL 3.0. Reviendra-t-il ensuite à SSL 3.0 car le serveur n'a pas activé TLS 1.1?

5
gsb005

Dans la prise de contact SSL/TLS, les choses se passent ainsi: le client envoie un version maximale prise en charge; le serveur choisit ensuite la version qui sera utilisée et l'envoie au client.

Le serveur, par définition, ne choisira pas une version de protocole qu'il ne prend pas en charge. Le serveur essaiera de sélectionner une version qu'il prend en charge et qui est également prise en charge par le client; cependant, le serveur ne dispose que d'informations partielles sur ce que le client prend en charge, car il n'a reçu qu'une "version maximale prise en charge". Si le client dit "jusqu'à TLS 1.1", le serveur sait que le client prend en charge TLS 1.1 (ou le prétend le moins) mais pas TLS 1.2; si le client prend en charge/accepte TLS 1.0 ou des versions de protocole antérieures, le serveur ne sait pas à ce stade.

Dans votre situation envisagée, si le serveur ne prend en charge que TLS 1.2 et SSL 3.0, il sélectionnera uniquement TLS 1.2 ou SSL 3.0. Si le client dit "Je prends en charge jusqu'à TLS 1.1", le serveur pas sélectionnera TLS 1.2 (car, à ce stade, le serveur sait que le client ne le prend pas en charge); par conséquent, il choisira SSL 3.0, qui est son seul autre choix. Le client, après avoir reçu cette réponse du serveur, peut très bien dire "SSL 3.0? De quel type de serveur antique s'agit-il? Pourquoi ne pas utiliser des outils en silex pendant que nous y sommes?" et refuser de communiquer davantage.

Fondamentalement, pour que la négociation réussisse, il doit y avoir doit une version de protocole prise en charge par le client et le serveur. Si le client prend en charge niquement TLS 1.1 et que le serveur prend en charge niquement TLS 1.2 et SSL 3.0, il n'y a pas de version de protocole commune et aucune communication ne se produit.


Maintenant, il peut y avoir des situations étranges dans lesquelles le client et le serveur ne remarquent pas qu'ils ont une version qu'ils prennent tous les deux en charge. Par exemple, le client, pour une raison quelconque, prend en charge TLS 1.0 et 1.2, mais pas TLS 1.1; et le serveur prend en charge TLS 1.0 et 1.1, mais pas TLS 1.2. Dans une telle situation, le client prétendra prendre en charge "jusqu'à TLS 1.2", et le serveur, qui ne connaît que TLS 1.0 et 1.1, choisira TLS 1.1, que le client rejettera.

Dans la pratique, de telles situations ne se produisent pas, car les implémentations n'ont pas de "trous" dans la gamme de versions de protocole qu'elles prennent en charge. Si un client ou un serveur prend en charge les versions X et Y , il prendra également en charge toutes les versions entre X et Y . Il est très peu logique de prendre en charge TLS 1.0 et TLS 1.2 mais pas TLS 1.1.

10
Thomas Pornin