2008-11-08 24 views
139

Esiste un modo semplice per verificare che una determinata chiave privata corrisponda a una determinata chiave pubblica? Ho alcuni * .pub e alcuni file * .key, e ho bisogno di controllare con chi.Come testare una coppia di chiavi DSA pubblica/privata?

Ancora, questi sono file pub/chiave, DSA.

Vorrei davvero preferisco una battuta di qualche tipo ...

risposta

222

ho trovato un modo che sembra funzionare meglio per me:

ssh-keygen -y -f <private key file> 

che comandano uscita volontà la chiave pubblica per il dato chiave privata, in modo poi basta confrontare l'output per ogni file * .pub.

+0

cosa fa esattamente questo? Perché ssh? – sammiwei

+2

probabilmente perché sta usando i keypairs per l'autenticazione ssh – etarion

+2

Nel mio caso, un server di lavoro centrale ha qualche dozzina di file 'id_rsa.pub.blahhost' e non sapevo quale corrispondesse alla chiave privata 'id_rsa' sola e io sono impostando scp senza password in modo che possa migrare da vecchi siti web. Creare una nuova coppia di chiavi non è un'opzione; Ho sistemato bene le mie chiavi e non ho intenzione di rovinare tutto. –

0

Crittografare qualcosa con la chiave pubblica, e vedere che la chiave privata decifra.

Questo code project article nientemeno che Jeff Atwood implementa un wrapper semplificato attorno alle classi di crittografia .NET. Supponendo che queste chiavi siano state create per l'uso con RSA, usa la classe asimmetrica con la tua chiave pubblica per crittografare, e lo stesso con la tua chiave privata per decifrare.

+0

Sono cercare qualcosa di un po 'più semplice. Dì, una shell una fodera o qualcosa di simile. Sono su linux e ho installato le cose normali come openssl. – Loki

+3

Questo è quasi utile quanto dire aggiungere una chiave pubblica al file authorized_keys e usare ssh per vedere quale chiave privata funziona. Il metodo funziona, ma è un dolore. –

12

Supponendo di avere le chiavi pubbliche all'interno certificati X.509, e supponendo che sono le chiavi RSA, allora per ogni chiave pubblica, fare

openssl x509 -in certfile -modulus -noout 

Per ogni chiave privata, fare

openssl rsa -in keyfile -modulus -noout 

Quindi abbinare le chiavi per modulo.

45

Per le chiavi DSA, utilizzare

openssl dsa -pubin -in dsa.pub -modulus -noout 

per stampare le chiavi pubbliche, quindi

openssl dsa -in dsa.key -modulus -noout 

per visualizzare le chiavi pubbliche corrispondenti ad una chiave privata, quindi confrontarli.

6

Elimina le chiavi pubbliche e ne genera di nuove dalle chiavi private. Tenerli in directory separate o utilizzare una convenzione di denominazione per mantenerli dritti.

+2

La domanda è chiedere come verificare e il dispositivo su cui verificheremo potrebbe non avere le strutture per generarne uno nuovo. – ArmenB

48

paragono sempre un hash MD5 del modulo usando questi comandi:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5 
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5 
CSR: openssl req -noout -modulus -in server.csr | openssl md5 

Se gli hash corrispondono, allora quei due file vanno insieme.

+0

Non funziona per le chiavi DSA – thomasrutter

-1

Basta usare puttygen e caricare la chiave privata in esso. Offre diverse opzioni, ad es. esportando la chiave pubblica coressponding.

+0

ciò non consente di testare chiavi in ​​mano private-pubbliche – MatFiz

9

Il controllo può essere reso più facile con diff:

diff <(ssh-keygen -y -f <private_key_file>) <public key file> 

L'unica cosa strana è che diff non dice nulla se i file sono gli stessi, quindi ti verrà detto solo se la pubblica e privata don Corrispondenza.

+2

Per ottenere l'output quando i file corrispondono: 'diff -s' – Roland

+0

Questa è una risposta eccellente. (1) 'diff -qs' restituisce una semplice risposta identica/non identica. (2) si dovrebbe cancellare il commento nel file di chiave pubblica prima di eseguire la diff. – emory

1

Tutte le risposte precedenti presuppongono che la chiave privata fornita - di cui non si conosce nulla e che si desidera scoprire se corrisponde alla chiave pubblica fornita - NON HA PASSWRASE.Se la chiave privata ha una passphrase, allora sia

ssh-keygen y -f PrivateKey

e

OpenSSL (RSA o DSA) -in PrivateKey -modulus -noout

chiedere la passphrase. Se si dispone di una chiave privata UNKNOWN, non si conosce se ha una passphrase o meno - per non parlare della passphrase se la chiave ne ha una.

Quindi, in pratica, vale la pena provare i suddetti comandi, ma se poi richiedono una passphrase, sei bloccato: non puoi estrarre la chiave pubblica e il modulo per farlo corrispondere al secondo campo sul file della chiave pubblica . Qualcuno sa un modo per aggirare questo?

+0

Questo è vero. Inoltre, se il file chiave è corrotto, ssh-keygen chiederà la passphrase dove non ci si aspettava che fosse una (sto cercando un modo per verificare che una coppia di chiavi pubblica/privata sia valida in generale) – Curt

2

Se si è in Windows e si desidera utilizzare un'interfaccia grafica, con puttygen è possibile importare la chiave privata in esso:

enter image description here

Una volta importato, è possibile salvare la propria chiave pubblica e confrontarlo con il vostro.

0

diff -s < (ssh-keygen -y -f ~/.ssh/id_rsa) < (cut -d '' -f 1,2 ~/.ssh/id_rsa.pub)

+0

Immagino che dovresti elaborare, il tuo post è molto vicino https://stackoverflow.com/a/22595408/3102264 – mpromonet