Come testare una coppia di chiavi DSA pubblica / privata?


167

Esiste un modo semplice per verificare che una determinata chiave privata corrisponda a una determinata chiave pubblica? Ho alcuni file * .pub e alcuni file * .key e devo verificare quale va con quale.

Ancora una volta, questi sono file pub / key, DSA.

Preferirei davvero un one-liner di qualche tipo ...

Risposte:


259

Ho trovato un modo che sembra funzionare meglio per me:

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

quel comando genererà la chiave pubblica per la chiave privata fornita, quindi confronta l'output con ciascun file * .pub.


2
cosa fa esattamente questo? Perché ssh?
sammiwei,

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

2
Nel mio caso, un server di lavoro centrale ha alcune dozzine di id_rsa.pub.blahhostfile e non sapevo quale corrispondesse alla id_rsachiave privata solitaria e sto configurando scp senza password in modo da poter migrare da vecchi siti Web. Fare una nuova coppia di chiavi non è un'opzione; Ho le chiavi impostate bene e non ho intenzione di rovinarle.
Chris K,

1
Questa soluzione sembra funzionare per tutti i tipi di chiavi SSH. Sono anche riuscito a recuperare una chiave pubblica fuori posto con questo approccio.
Jari Turkia,

53

Confronto 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, questi due file vanno insieme.


48

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 a una chiave privata, quindi confrontarle.


18

Supponendo che tu abbia le chiavi pubbliche all'interno dei certificati x.509 e supponendo che siano chiavi RSA, quindi per ogni chiave pubblica, esegui

    openssl x509 -in certfile -modulus -noout

Per ogni chiave privata, fare

    openssl rsa -in keyfile -modulus -noout

Quindi abbina i tasti per modulo.


17

Il controllo può essere semplificato 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 uguali, quindi ti verrà detto solo se pubblico e privato non corrispondono.


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

3
Questa è una risposta eccellente (1) diff -qsrestituisce una semplice risposta "identica / non identica. (2) è necessario eliminare il commento nel file della chiave pubblica prima di eseguire la diff.
emory

7

Elimina le chiavi pubbliche e generane di nuove dalle chiavi private. Mantenerli in directory separate o utilizzare una convenzione di denominazione per mantenerli diritti.


3
La domanda è: come verificare e il dispositivo su cui lo verificheremo potrebbe non avere le strutture per generarne uno nuovo.
ArmenB,

5

Immettere il comando seguente per verificare se una chiave privata e una chiave pubblica sono un set corrispondente (identico) o non un set corrispondente (diverso) nella directory $ USER / .ssh. Il comando cut impedisce il confronto del commento alla fine della riga nella chiave pubblica, consentendo di confrontare solo la chiave.

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

L'output apparirà come una di queste righe.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Ho scritto uno script di shell che gli utenti usano per controllare l'autorizzazione dei file dei loro file ~ / .ssh / e il set di chiavi abbinato. Risolve le mie sfide con incidenti utente che configurano ssh. Potrebbe esserti d'aiuto. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Nota: la mia risposta precedente (nel marzo 2018) non funziona più con le ultime versioni di openssh. Risposta precedente: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)


Credo che si dovrebbe elaborare, il tuo post è veramente vicino alla stackoverflow.com/a/22595408/3102264
mpromonet


4

Se sei in Windows e vuoi usare una GUI, con puttygen puoi importare la tua chiave privata in essa:

inserisci qui la descrizione dell'immagine

Una volta importato, puoi salvare la sua chiave pubblica e confrontarla con la tua.


1

Crittografa qualcosa con la chiave pubblica e vedi quale chiave privata la decodifica.

Questo articolo di progetto di codice di 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, utilizzare la classe asimmetrica con la chiave pubblica per crittografare e lo stesso con la chiave privata per decrittografare.


Sto cercando qualcosa di un po 'più semplice. Per esempio, una shell una fodera o simili. Sono su Linux e ho roba normale come openssl installato.
Loki,

3
È quasi utile come dire aggiungere una chiave pubblica al file authorized_keys e usare ssh per vedere quale chiave privata funziona. Il metodo funziona, ma è un dolore.
Bradley Kreider

0

Se non restituisce nulla, corrispondono:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

-2

Basta usare puttygen e caricare la chiave privata al suo interno. Offre diverse opzioni, ad es. L'esportazione della chiave pubblica corrispondente.


1
ciò non consente di testare la coppia di chiavi privata-pubblica
MatFiz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.