web-dev-qa-db-fra.com

Comment pouvez-vous vérifier si une clé privée et un certificat correspondent dans OpenSSL avec ECDSA?

Je sais comment faire cela avec RSA clés (voir cet article: Déterminer si la clé privée appartient au certificat? ) mais je le fais ne sais pas comment faire cela pour ECDSA paires certificat/clé.

Avec les clés RSA, le module peut être utilisé pour cela. Cependant, je ne sais pas quel est "l'équivalent" pour ECDSA.

Merci!

11
Jeff

Les données équivalentes pour l'ECDSA, ou tout ECC incluant l'ECDH, sont la valeur en points publique et une spécification de la courbe utilisée. En pratique, pour l'interopérabilité, les gens utilisent l'une des courbes identifiées par un OID (NIST, SECG, etc.) normalisé et surtout les deux "bénis" par NSA Suite B, à savoir nistp256 et nistp384, bien que les formats ASN.1 (et la bibliothèque openssl) puissent prendre en charge n'importe quelle (?) Courbe de forme Weierstrass.

Mais les méthodes faciles sont en fait les mêmes que dans Déterminer si la clé privée appartient au certificat? , auquel j'ajoute quelques possibles améliorations:

  1. Utilisation openssl x509 -in cert -pubkey pour obtenir le champ du certificat et le comparer à (la totalité) de la clé publique (dans le même codage SPKI) obtenue à partir de la clé privée avec openssl ec -in key -pubout

    1A. Au lieu de différentes commandes pour les clés privées RSA et ECC, depuis openssl 1.0.0 en 2010, vous pouvez utiliser l'algorithme générique openssl pkey -in key -pubout pour les deux.

  2. Configurez un programme basé sur openssl pour (essayer) d'utiliser la clé et le certificat "propre". S'ils ne correspondent pas, la bibliothèque openssl retournera une erreur que le programme devrait afficher.

    2A. Au lieu de configurer un environnement de serveur complet ou de reprendre temporairement un environnement existant, vous pouvez simplement exécuter openssl s_server -accept X -cert cfile -key kfile où X est un port utilisable sur votre machine = non restreint et non actuellement lié ou connecté. Si cela commence bien (correspondance de cert et clé), contrôlez-C (ou équivalent).

12
dave_thompson_085

Pour donner une implémentation concrète de ce que @ dave_thompson_085 a dit, cela fait l'affaire - il extrait la clé publique de chacun du certificat et de la clé privée, puis calcule leur hachage md5, vous permettant de les comparer facilement:

# openssl x509 -pubkey -in mydomain-ecc.crt -noout | openssl md5
(stdin)= 77e16c92c1a4907c7da34e72a1c5b879
# openssl pkey -pubout -in mydomain-ecc.key | openssl md5
(stdin)= 77e16c92c1a4907c7da34e72a1c5b879

Depuis que cette question a été publiée, ne réponse a été ajoutée à la question liée par l'OP, fournissant une ligne unique qui fonctionnera également avec les certificats ECC (en utilisant pkey au lieu de rsa), mais il ne fournit pas de confirmation visible.

5
Synchro