J'ai écrit une petite application client et serveur Java 7. J'ai keystore avec 3 certificats X.509 RSA auto-signés. Lorsque le client se connecte via SSL, le serveur envoie un message de certificat SSL avec un seul certificat. Je suis un peu nouveau sur SSL/TLS. J'ai aussi regardé le code JSSE sun.security.ssl.X509KeyManagerImpl et trouvé ci-dessous les commentaires:Le serveur peut-il envoyer plusieurs certificats au client?
/*
* Return the best alias that fits the given parameters.
* The algorithm we use is:
* . scan through all the aliases in all builders in order
* . as soon as we find a perfect match, return
* (i.e. a match with a cert that has appropriate key usage
* and is not expired).
* . if we do not find a perfect match, keep looping and remember
* the imperfect matches
* . at the end, sort the imperfect matches. we prefer expired certs
* with appropriate key usage to certs with the wrong key usage.
* return the first one of them.
*/
private String More ...chooseAlias(List<KeyType> keyTypeList,
Principal[] issuers, CheckType checkType)
Commentaire est assez clair que le serveur envoie unique meilleur certificat correspondant, mais je ne semble pas comprendre la raison. Comme dans mon cas, je veux que le serveur envoie tous les 3 certificats, afin que le client puisse en choisir un et valider la chaîne. Et aussi, si mon client n'a pas le certificat que le serveur envoie, la connexion est abandonnée avec SSLHandshakeException 'Aucun certificat de confiance trouvé'. Donc ma question est la suivante: pourquoi le serveur ne peut-il pas envoyer les 3 certificats si le client a demandé des informations (de ClientHello) avec les 3 certificats? Est-ce quelque chose à voir avec TLS 1.0 vs TLS 1.2?