web-dev-qa-db-fra.com

OpenSSL ECDHE-RSA ... Cipher Suite sélectionnée lors de l'utilisation de RSA Server Cert et du client ECDSA Cert

La scène:

  • s_Server à l'aide du certificat RSA.
  • s_client à l'aide du certificat ECC-ECDSA.

L'authentification de la clientèle est requise (option -Version définie sur S_Server)

Cipher-Suite sélectionnée après la poignée de main est ECDHE-RSA-AES256-GCM-SHA384.

Donc, je ne comprends pas complètement la manière dont le type de certificat (RSA-DSA) affecte la suite Cipher-Suite sélectionnée (concernant la partie authentification de la suite Cipher-Suite).

Pourrait-il être que le certificat du serveur définit le type d'authentification utilisé?

Quelqu'un pourrait-il expliquer comment les certificats du serveur/client affectent la sélection des suites ciphériques?

6
jpradas

"ECDHE" signifie que l'échange de clé utilisera l'algorithme Diffie-Hellman (sur les courbes elliptiques) avec des éléments DH fraîchement générés; Le dernier "E" signifie éphémère. Donc, tandis que DH produit une clé partagée, elle fonctionnera avec des valeurs produites au hasard, et rien dans DH ne s'assurera authentification: Le client n'a aucun moyen de savoir si la clé publique DH qu'il voit appartient vraiment à le serveur prévu.

Pour ramener l'authentification du serveur, quelque chose d'autre est nécessaire. C'est un Signature: Le serveur signe numériquement sa moitié de l'échange de clé DH. Cette signature utilise la clé qui se trouve dans le certificat du serveur, et donc l'algorithme de signature dépend du type de cette clé. Dans "ECDHE-RSA", la partie "RSA" concerne cette signature: elle dit qu'il sera de type RSA (et implique bien sûr que le certificat du serveur contient la clé publique RSA correspondante).

Il n'y a pas de tel mécanisme pour client authentification. Lorsque le serveur demande un certificat client, le client devra calculer une signature et envoyer sa clé publique (dans le cadre de son certificat), mais il n'y a aucune relation entre ce type de certificat client et la suite Cipher. Les raisons de cela sont:

  • Les certificats clients apparaissent plus tard dans la poignée de main, après la sélection de la suite Cipher. Lorsque la suite Cipher est choisie, le client ne savait pas encore si un certificat client sera demandé du tout.

  • En général, un serveur SSL doit être capable de répondre au monde entier, mais lorsque le client se connecte, il sait Quel serveur il parle et peut sélectionner un certificat approprié en conséquence ( Le serveur envoie également une liste de noms de CA pour réduire les choix du client). Les certificats clients sont une rareté dans un contexte Web; Dans toutes les généralités, les serveurs SSL demandent aux certificats clients lorsqu'ils savent que les clients ont déjà des certificats d'un type approprié (par exemple, un serveur de banque ne posera que le certificat de client que si le client fait partie d'un programme dans lequel la banque a assuré la distribution de la Banque. ces certificats). Par conséquent, il n'est pas nécessaire de négocier dynamique du type de certificat client.

La sélection de la suite Cipher est tout sur le choix algorithmes qui sont supportés aux deux extrémités. Si le serveur doit signer et que le client vérifie, le client doit être capable de comprendre l'algorithme de signature et donc son type de clé.

En pratique, le client envoie une liste de suites de chiffrement prises en charge et le serveur sélectionne l'un d'entre eux - une suite Cipher qui correspond bien sûr aux algorithmes et aux types de clés que le serveur va utiliser. Théoriquement, la liste envoyée par le client est commandée par "préférence" et le serveur est censé honorer cette commande, c'est-à-dire choisir la première suite Cipher dans la liste des clients qui correspond également aux capacités du serveur. Tous les serveurs ne sont pas aussi courtois.

Voir cette réponse pour une introduction à SSL/TLS.

8
Thomas Pornin