Come si può verificare se una chiave privata e un certificato corrispondono in OpenSSL con ECDSA?

8

So come farlo con le chiavi RSA (leggi questo articolo: Determina se la chiave privata appartiene al certificato? ) tuttavia non so come farlo per le coppie di certificati / chiavi ECDSA.

Con le chiavi RSA, il modulo può essere usato per questo. Tuttavia non sono sicuro di quale sia l'equivalente per ECDSA

Grazie

    
posta Jeff 18.11.2014 - 15:57
fonte

2 risposte

7

I dati equivalenti per ECDSA, o qualsiasi ECC incluso ECDH, sono il valore del punto pubblico e una specifica della curva utilizzata. In pratica per l'interoperabilità le persone usano una delle curve identificate da un OID standard (NIST, SECG, ecc.) E principalmente solo i due "benedetti" dalla NSA Suite B, vale a dire nistp256 e nistp384, nonostante i formati ASN.1 (e la libreria openssl ) può supportare qualsiasi (?) curva della forma di Weierstrass.

Ma i facili metodi sono effettivamente gli stessi di Determina se la chiave privata appartiene al certificato? , a cui aggiungo alcuni possibili miglioramenti:

  1. Usa openssl x509 -in cert -pubkey per ottenere il campo dal certificato e confrontalo con (tutto) con la chiave pubblica (nella stessa codifica SPKI) ottenuto dalla chiave privata con openssl ec -in key -pubout

    1A. Invece di diversi comandi per chiavi private RSA ed ECC, dal momento che openssl 1.0.0 nel 2010 è possibile utilizzare l'algoritmo generico openssl pkey -in key -pubout per entrambi.

  2. Configurare un programma basato su openssl su (provare a) utilizzare la chiave e il "proprio" certificato. Se non corrispondono, la libreria openssl restituirà un errore che il programma dovrebbe visualizzare.

    2A. Invece di configurare un intero ambiente server, o di occuparne temporaneamente uno esistente, puoi semplicemente eseguire openssl s_server -accept X -cert cfile -key kfile dove X è qualsiasi porta utilizzabile sulla tua macchina = non limitato e non attualmente collegato o connesso. Se inizia okay (corrispondenza tasto cert &), solo control-C (o equivalente).

risposta data 18.11.2014 - 17:25
fonte
3

Per dare un'implementazione concreta di ciò che @ dave_thompson_085 ha detto, questo è il trucco: estrae la chiave pubblica da ciascun certificato e dalla chiave privata, quindi calcola il loro hash md5, permettendoti di confrontarli facilmente:

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

Poiché questa domanda è stata pubblicata, una risposta è stata aggiunta alla domanda collegata dall'OP, fornendo un one-liner che funzionerà anche con i certificati ECC (utilizzando pkey anziché rsa ), ma non fornisce conferma visibile.

    
risposta data 30.11.2016 - 11:59
fonte

Leggi altre domande sui tag