Au cours de la négociation MTLS, une fois que ServerHello est terminé, le client renvoie le certificat client au serveur, je dois savoir si le client doit uniquement envoyer le certificat client ou s'il est nécessaire d'envoyer le certificat client avec l'ensemble de la chaîne d'autorité de certification?
J'ai une situation où je vois un échec de prise de contact après CertificateVerify. Le certificat client semble bon et il est déconnecté de subCA qui est déconnecté d'un RootCA que le serveur approuve également (le serveur approuve uniquement root ca, pas le subCA), dans cette situation, nous voyons le client renvoyer uniquement le certificat client sans la chaîne, est-ce pour cela que je vois l'échec de la poignée de main ?? Je me demande si le client a renvoyé l'intégralité de la chaîne d'autorités de certification, le serveur devrait savoir que le client est signé par SubCA qui est ensuite signé par une autorité de certification racine en laquelle il a confiance ... J'ai cherché sur Google et trouvé beaucoup d'informations sur l'envoi du serveur cert avec chaîne CA et CA acceptables pour le client .. mais rien autour de ce que le client doit faire ..
toute aide est appréciée.
Vous êtes responsable d'envoyer suffisamment de chaîne pour que le serveur connecte votre certificat à une racine de confiance.
Pour TLS 1.2, cela est expliqué dans RFC 5246 . Les certificats clients sont définis dans §7.4.6 , qui (entre autres) indique:
Les certificats clients sont envoyés à l'aide de la structure de certificats définie à la section 7.4.2.
Et si vous regardez dans §7.4.2 il décrit la structure du certificat comme incluant le certificate_list
(c'est moi qui souligne):
Il s'agit d'une séquence (chaîne) de certificats . Le certificat de l'expéditeur DOIT venir en premier dans la liste. Chaque certificat suivant DOIT certifier directement celui qui le précède. Étant donné que la validation du certificat nécessite que les clés racine soient distribuées indépendamment, le certificat auto-signé qui spécifie l'autorité de certification racine PEUT être omise de la chaîne, en supposant que l'extrémité distante doit déjà la posséder afin de la valider dans tous les cas.
En bref, le serveur est censé avoir la racine approuvée, mais n'est pas requis ou ne devrait pas avoir de certificats intermédiaires qui pourraient être requis. Le client est tenu de les fournir s'il souhaite que la vérification se déroule de manière fluide et fiable. (Et il en va de même pour les certificats que le serveur envoie au client).
Le serveur validant un certificat client est exactement comme le client validant le certificat du serveur, sauf que le serveur ne fait généralement confiance qu'à une seule autorité de certification racine et que le serveur n'est généralement pas disposé à télécharger les certificats intermédiaires manquants (ce que font les navigateurs).
Le serveur validant le certificat client doit pouvoir créer une chaîne à partir du certificat que le serveur approuve (vraisemblablement votre autorité de certification racine) jusqu'au certificat d'entité finale. Si cela nécessite un intermédiaire, alors l'intermédiaire doit être fourni, ou l'intermédiaire doit être configuré en tant que racine approuvée sur le serveur, en plus de la racine réelle.