2008-11-08 19 views
139

Czy istnieje prosty sposób sprawdzenia, czy dany klucz prywatny pasuje do danego klucza publicznego? Mam kilka * .pub i kilka * .key plików, i muszę sprawdzić, które z nich działają.Jak testujesz publiczny/prywatny parytet DSA?

To znowu pub/key files, DSA.

Chciałbym naprawdę wolą jedno-liner jakiegoś ...

Odpowiedz

222

znalazłem sposób, który wydaje się lepiej pracować dla mnie:

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

że polecenie Wyjście wola klucz publiczny dla danego klucza prywatnego, więc wtedy wystarczy porównać dane wyjściowe do każdego pliku * .pub.

+0

co to dokładnie robi? Dlaczego ssh? – sammiwei

+2

prawdopodobnie dlatego, że używa keypairs do uwierzytelniania ssh – etarion

+2

W moim przypadku centralny serwer roboczy ma kilka tuzinów plików 'id_rsa.pub.blahhost' i nie wiedziałem, który z nich pasuje do samotnego klucza' id_rsa' i jestem konfigurowanie bez haseł scp, więc mogę migrować ze starych stron internetowych. Tworzenie nowej pary kluczy nie jest opcją; Mam dobrze przygotowane klucze i nie zamierzam tego zepsuć. –

0

coś Szyfrowanie z kluczem publicznym i zobacz, klucz prywatny odszyfrowuje ją.

Tenprzez samego Jeffa Atwoka implementuje uproszczone opakowanie klasy .NET crypto. Zakładając, że te klucze zostały utworzone do użycia z RSA, użyj klasy asymetrycznej z twoim kluczem publicznym do szyfrowania, i to samo z kluczem prywatnym do odszyfrowania.

+0

ja szukanie czegoś nieco prostszego. Powiedzmy, że jest to jedna liniowa skorupa lub tym podobne. Jestem na Linuksie i mam zainstalowane normalne rzeczy, takie jak openssl. – Loki

+3

To prawie tak samo przydatne, jak powiedzenie: dodaj klucz publiczny do pliku authorized_keys i użyj ssh, aby sprawdzić, który klucz prywatny działa. Metoda działa, ale to jest ból. –

12

Zakładając, że masz klucze publiczne wewnątrz certyfikatów X.509, a zakładając są klucze RSA, a następnie dla każdego klucza publicznego, zrobić

openssl x509 -in certfile -modulus -noout 

Dla każdego klucza prywatnego, czy

openssl rsa -in keyfile -modulus -noout 

Następnie dopasuj klucze według modułu.

45

Dla kluczy DSA, użyj

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

drukować kluczy publicznych, a następnie

openssl dsa -in dsa.key -modulus -noout 

aby wyświetlić klucze publiczne odpowiadające klucza prywatnego, a następnie porównać je.

6

Usuń klucze publiczne i wygeneruj nowe z kluczy prywatnych. Przechowuj je w oddzielnych katalogach lub użyj konwencji nazewnictwa, aby zachować je prosto.

+2

Pytanie brzmi, jak zweryfikować, a urządzenie, na którym będziemy je weryfikować, może nie mieć możliwości wygenerowania nowego. – ArmenB

48

zawsze porównać mieszania MD5 z modułu przy użyciu tych poleceń:

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 

Jeśli hashe się zgadzają, wtedy te dwa pliki razem.

+0

Nie działa dla kluczy DSA – thomasrutter

-1

Po prostu użyj puttygen i załaduj do niego swój klucz prywatny. Oferuje różne opcje, np. eksportowanie kluczowego klucza publicznego.

+0

to nie pozwala na testowanie numeru prywatnego-publicznego – MatFiz

9

Czek może być łatwiejsze z Diff:

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

Jedyną dziwną rzeczą jest to, że nic nie mówi diff, jeśli pliki są takie same, więc będziesz powiedział tylko jeśli publicznego i prywatnego don 't mecz.

+2

Aby uzyskać dane wyjściowe, gdy pliki są zgodne: 'diff -s' – Roland

+0

To jest doskonała odpowiedź. (1) 'diff -qs' zwraca prostą" identyczną/nieidentyczną odpowiedź. (2) powinieneś usunąć komentarz w pliku klucza publicznego przed uruchomieniem diff. " – emory

1

Wszystkie powyższe odpowiedzi zakładają, że dany klucz prywatny - o którym nic nie wiesz i chcesz się dowiedzieć, czy pasuje do podanego klucza publicznego - NIE MA PASZPOWYśCI.Jeśli klucz prywatny ma hasło, następnie obie

ssh-keygen -y -f PrivateKey

i

openssl (RSA lub DSA) -w PrivateKey -modulus -noout

prosić hasło. Jeśli masz klucz prywatny NIEZNANY, nie wiesz, , czy ma ono hasło, czy nie - nie mówiąc już o tym, co to jest hasło, jeśli klucz ma taki klucz.

Praktycznie warto wypróbować powyższe polecenia, ale jeśli następnie poprosi o hasło, utkniesz: nie można wyodrębnić klucza publicznego i jego modułu, aby pasował do drugiego pola w pliku klucza publicznego . Czy ktoś wie, jak to obejść?

+0

To prawda. Ponadto, jeśli plik klucza jest uszkodzony, ssh-keygen zapyta o hasło, w którym nie powinno się go znaleźć (szukam sposobu na zweryfikowanie, że para kluczy publicznych/prywatnych jest ogólnie poprawna). – Curt

2

Jeśli w systemie Windows i chcesz używać GUI, z puttygen można zaimportować klucz prywatny do niego:

enter image description here

Po zaimportowaniu można zapisać swój klucz publiczny i porównać go do Ciebie.

0

różn -s < (ssh generacji klucza Y f ~/.ssh/id_rsa) < (cut -d '' -f 1,2 ~/.ssh/id_rsa.pub)

+0

Myślę, że powinieneś rozwinąć, twój wpis jest naprawdę bliski https://stackoverflow.com/a/22595408/3102264 – mpromonet

Powiązane problemy