it-swarm.com.de

Wie können Sie überprüfen, ob ein privater Schlüssel und ein Zertifikat in OpenSSL mit ECDSA übereinstimmen?

Ich weiß, wie man das mit RSA Schlüsseln macht (siehe diesen Artikel: Bestimmen, ob der private Schlüssel zum Zertifikat gehört? ), aber ich tue es Ich weiß nicht, wie ich das für ECDSA Zertifikat/Schlüssel-Paare machen soll.

Bei RSA-Schlüsseln kann hierfür der Modul verwendet werden. Ich bin mir jedoch nicht sicher, was das "Äquivalent" für ECDSA ist.

Vielen Dank!

11
Jeff

Die äquivalenten Daten für ECDSA oder eine ECC einschließlich ECDH sind der öffentliche Punktwert und eine Spezifikation der verwendeten Kurve. In der Praxis verwenden Menschen für die Interoperabilität eine der Kurven, die durch ein standardisiertes OID (NIST, SECG usw.) und meistens nur die beiden durch NSA "" gesegneten "Kurven gekennzeichnet sind) Suite B, nämlich nistp256 und nistp384, obwohl die ASN.1-Formate (und die openssl-Bibliothek) jede (?) Weierstrass-Formkurve unterstützen können.

Aber die einfachen Methoden sind effektiv die gleichen wie in Bestimmen, ob der private Schlüssel zum Zertifikat gehört? , zu denen ich einige mögliche hinzufüge Verbesserungen:

  1. Verwenden Sie openssl x509 -in cert -pubkey, Um das Feld aus dem Zertifikat abzurufen, und vergleichen Sie es mit (allen) öffentlichen Schlüsseln (in derselben SPKI-Codierung), die vom privaten Schlüssel mit openssl ec -in key -pubout Erhalten wurden.

    1A. Anstelle verschiedener Befehle für private RSA- und ECC-Schlüssel können Sie seit openssl 1.0.0 im Jahr 2010 den algorithmischen openssl pkey -in key -pubout Für beide verwenden.

  2. Konfigurieren Sie ein openssl-basiertes Programm so, dass der Schlüssel und das "eigene" Zertifikat verwendet werden (versuchen). Wenn sie nicht übereinstimmen, gibt die openssl-Bibliothek einen Fehler zurück, den das Programm anzeigen soll.

    2A. Anstatt eine gesamte Serverumgebung einzurichten oder eine vorhandene vorübergehend zu übernehmen, können Sie einfach openssl s_server -accept X -cert cfile -key kfile Ausführen, wobei X ein beliebiger auf Ihrem Computer verwendbarer Port ist = nicht eingeschränkt und derzeit nicht gebunden oder verbunden. Wenn es in Ordnung startet (Zertifikat- und Schlüsselübereinstimmung), drücken Sie einfach-C (oder ein gleichwertiges Element).

12

Um eine konkrete Implementierung dessen zu geben, was @ dave_thompson_085 gesagt hat, ist dies der Trick: Es extrahiert den öffentlichen Schlüssel aus jedem Zertifikat und dem privaten Schlüssel und berechnet dann den MD5-Hash, sodass Sie sie einfach vergleichen können:

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

Seit diese Frage veröffentlicht wurde, wurde eine Antwort zu der vom OP verknüpften Frage hinzugefügt, wodurch ein Einzeiler bereitgestellt wird, der auch mit ECC-Zertifikaten funktioniert (unter Verwendung von pkey anstelle von rsa), bietet jedoch keine sichtbare Bestätigung.

5
Synchro