J'ai séparé le hors sujet.
Je rajouterais un autre cas : les anti-virus qui remplacent le certificat par un certificat auto-signé ne vérifient pas si le certificat a été révoqué.
Oui, la vérification des certificats envoyés est assez compliquée :
- vérification du nom du site
- vérification des signatures (de type RSA, DSA, DH, ECDSA....)
- vérification du chaînage : chaque certificat est bien signé
- vérification du statut de révocation des différents éléments de la chaîne (sauf la racine)
- vérification de la date de validité
- vérification que tous les éléments sauf le certificat final sont des autorités de certification
- vérification des "rôles" autorisés
- vérification des contraintes comme la longueur de la chaîne de certification
- vérification des contraintes "rares" comme les restrictions sur les domaines (limite aux domaines dans fr par exemple)
- vérification qu'il n'a pas de contrainte obligatoire que l'outil ne reconnait pas : une contrainte obligatoire inconnue doit faire rejeter le certificat
Quelque failles connues :
- vérification du nom du site : les données texte dans un certificat sont préfixées par la taille et non délimitées par un terminateur comme en C; manipuler le nom de domaine comme une chaine C conduit à un résultat incorrect si un nul est présent : la fin du nom de domaine n'est pas pris en compte; faille dans GNU TLS
- vérification du statut de révocation : Google Chrome pendant longtemps n'a pas fait la vérification en ligne du statut de révocation, considérant (à raison) que cela n'apporte rien; Firefox la fait mais par défaut considère que ne pas pouvoir vérifier ne conduit pas à une erreur. La vérification en ligne du statut de révocation est un bricolage mal conçu qui a été complété par la suite (stapling).
- vérification du statut de révocation des différents éléments de la chaîne : je ne crois pas que tous les outils le fassent pour chaque élèment sauf la racine
- vérification que tous les éléments sauf le certificat final sont des autorités : une version de IE ne le faisait pas; avoir la clé privée d'un certificat valide (pour n'importe quel domaine) suffisait pour s'authentifier comme n'importe quel autre domaine : il fallait simplement produire un certificat signé avec la clé privée. Un "responsable" de M$ a affirmé que c'était pas grave et qu'en cas de doute l'utilisateur n'avait qu'à valider lui même les certificats!
- vérification des contraintes : la contrainte de longueur de la chaine est essentielle :
est une autorité + longueur nulle = n'est pas une autorité
Une obscure autorité produisait des certificats clients spécifiant qu'ils étaient des autorités de certification mais avec une longueur nulle!!!!
J'en oublie sans doute.