2008-11-08 11 views
139

¿Hay alguna manera fácil de verificar que una clave privada determinada concuerde con una clave pública dada? Tengo algunos * .pub, y algunos * .key files, y necesito comprobar con qué.¿Cómo se prueba un par de llaves DSA público/privado?

De nuevo, se trata de archivos pub/key, DSA.

que realmente preferiría una sola línea de algún tipo ...

Respuesta

222

he encontrado una manera que parece funcionar mejor para mí:

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

ese comando dará salida a la clave pública para la clave privada determinada, por lo que entonces sólo comparar la salida de cada archivo * .pub.

+0

¿Qué hace exactamente esto? ¿Por qué ssh? – sammiwei

+2

probablemente porque está usando pares de claves para autenticación ssh – etarion

+2

En mi caso, un servidor de trabajo central tiene unas pocas docenas de archivos 'id_rsa.pub.blahhost' y no sabía cuál coincidía con la única clave privada' id_rsa' y estoy configurando scp sin contraseña para que pueda migrar desde sitios web antiguos. Hacer un nuevo par de claves no es una opción; Tengo mis llaves bien configuradas y no voy a estropear eso. –

0

Cifrar algo con la clave pública, y ver lo que la clave privada descifra.

Este code project article de nada menos que Jeff Atwood implementa un envoltorio simplificado alrededor de las clases .NET crypto. Suponiendo que estas claves se crearon para ser utilizadas con RSA, use la clase asimétrica con su clave pública para encriptar, y lo mismo con su clave privada para descifrar.

+0

estoy buscando algo un poco más simple. Digamos, un revestimiento de concha o similar. Estoy en Linux y tengo las cosas normales como openssl instalado. – Loki

+3

Eso es casi tan útil como decir agregar una clave pública a su archivo authorized_keys y usar ssh para ver qué clave privada funciona. El método funciona, pero es un dolor. –

12

Asumiendo que tiene las claves públicas dentro de los certificados X.509, y asumiendo que son claves RSA, entonces para cada clave pública, hacer

openssl x509 -in certfile -modulus -noout 

Para cada clave privada, hacer

openssl rsa -in keyfile -modulus -noout 

Luego haga coincidir las claves por módulo.

45

Para claves DSA, utilice

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

para imprimir las claves públicas, a continuación,

openssl dsa -in dsa.key -modulus -noout 

para mostrar las claves públicas correspondientes a una clave privada, y luego compararlos.

6

Borre las claves públicas y genere las nuevas desde las claves privadas. Guárdelos en directorios separados, o use una convención de nomenclatura para mantenerlos en línea.

+2

La pregunta es cómo verificar y el dispositivo en el que vamos a verificar podría no tener las herramientas para generar uno nuevo. – ArmenB

48

Siempre comparar un hash MD5 del módulo usando estos comandos:

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 

Si los hashes coinciden, entonces esos dos archivos van juntos.

+0

No funciona con las claves DSA – thomasrutter

-1

Simplemente use puttygen y cargue su clave privada en ella. Ofrece diferentes opciones, p. exportar la clave pública correspondiente.

+0

esto no permite probar el par de llaves público-privado – MatFiz

9

El cheque puede ser más fácil con diff:

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

Lo único extraño es que diff no dice nada si los archivos son los mismos, por lo que sólo se le dijo si el público y privado Don 't partido.

+2

Para obtener resultados cuando los archivos coinciden: 'diff -s' – Roland

+0

Esta es una respuesta excelente. (1) 'diff -qs' devuelve una simple" respuesta idéntica/no idéntica. (2) debe eliminar el comentario en el archivo de clave pública antes de ejecutar el diff – emory

1

Todas las respuestas anteriores asumen que la clave privada dada, de la que no sabe nada y quiere saber si coincide con la clave pública dada, NO TIENE PASAJES.Si la clave privada tiene una frase de contraseña, entonces ambos

ssh-keygen -y -f PrivateKey

y

openssl (RSA o DSA) -en PrivateKey -modulus -noout

pedir la frase de contraseña Si tiene una clave privada DESCONOCIDA, no sabe si tiene una frase de contraseña o no, y mucho menos cuál es la contraseña si la clave tiene una.

Prácticamente, vale la pena probar los comandos anteriores, pero si luego piden una frase de contraseña, estás atascado: no puedes extraer la clave pública y su módulo para que coincida con el segundo campo en el archivo de clave pública . ¿Alguien sabe una forma de evitar esto?

+0

Esto es cierto. Además, si el archivo de clave está dañado, ssh-keygen pedirá una frase de contraseña donde no se esperaba que fuera una (estoy buscando una manera de verificar que un par de clave pública/privada sea válida en general). – Curt

2

Si está en Windows y desea utilizar una interfaz gráfica de usuario, con puttygen puede importar su clave privada en ella:

enter image description here

Una vez importado, puede guardar su clave pública y compararlo con el suyo.

0

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

+0

Supongo que deberías dar más detalles, tu publicación está muy cerca de https://stackoverflow.com/a/22595408/3102264 – mpromonet

Cuestiones relacionadas