Jak przetestować publiczną / prywatną parę kluczy DSA?

167

Czy istnieje łatwy sposób sprawdzenia, czy dany klucz prywatny pasuje do danego klucza publicznego? Mam kilka plików * .pub i kilka plików * .key i muszę sprawdzić, które z którymi są powiązane.

Ponownie, są to pliki pub / key, DSA.

Naprawdę wolałbym jakiś jednolinijkowy ...

Loki
źródło

Odpowiedzi:

259

Znalazłem sposób, który wydaje się działać lepiej dla mnie:

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

to polecenie wyświetli klucz publiczny dla podanego klucza prywatnego, więc po prostu porównaj wynik z każdym plikiem * .pub.

Loki
źródło
2
co to dokładnie robi? Dlaczego ssh?
sammiwei
2
prawdopodobnie dlatego, że używa par kluczy do uwierzytelniania ssh
etarion,
2
W moim przypadku centralny serwer roboczy ma kilkadziesiąt id_rsa.pub.blahhostplików i nie wiedziałem, który z nich pasuje do pojedynczego id_rsaklucza prywatnego i ustawiam scp bez hasła, aby móc migrować ze starych witryn. Tworzenie nowej pary kluczy nie wchodzi w grę; Mam dobrze skonfigurowane klucze i nie zamierzam tego zepsuć.
Chris K
1
Wydaje się, że to rozwiązanie działa dla wszystkich typów kluczy SSH. Dzięki temu podejściu udało mi się nawet odzyskać zagubiony klucz publiczny.
Jari Turkia
53

Zawsze porównuję skrót MD5 modułu za pomocą 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 skróty pasują, te dwa pliki idą w parze.

Robert
źródło
48

W przypadku kluczy DSA użyj

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

wydrukować klucze publiczne

 openssl dsa -in dsa.key -modulus -noout

aby wyświetlić klucze publiczne odpowiadające kluczowi prywatnemu, a następnie je porównaj.

Martin przeciwko Löwis
źródło
18

Zakładając, że masz klucze publiczne wewnątrz certyfikatów x.509 i zakładając, że są to klucze RSA, to dla każdego klucza publicznego wykonaj

    openssl x509 -in certfile -modulus -noout

Zrób dla każdego klucza prywatnego

    openssl rsa -in keyfile -modulus -noout

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

Martin przeciwko Löwis
źródło
17

Sprawdzenie można ułatwić dzięki diff:

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

Jedyną dziwną rzeczą jest to, że diff nic nie mówi, jeśli pliki są takie same, więc zostaniesz poinformowany tylko wtedy, gdy publiczne i prywatne nie pasują.

John D.
źródło
3
Aby uzyskać dane wyjściowe, gdy pliki pasują do siebie:diff -s
Roland
3
To doskonała odpowiedź. (1) diff -qszwraca prostą „identyczną / nie identyczną odpowiedź. (2) przed uruchomieniem różnicy należy usunąć komentarz z pliku klucza publicznego.
emory
7

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

Bill the Lizard
źródło
3
Pytanie brzmi, jak zweryfikować, a urządzenie, na którym będziemy to weryfikować, może nie mieć możliwości wygenerowania nowego.
ArmenB
5

Wpisz następujące polecenie, aby sprawdzić, czy klucz prywatny i klucz publiczny są zgodnymi zestawami (identycznymi), czy nie pasującymi zestawami (różnią się) w katalogu $ USER / .ssh. Polecenie cut zapobiega porównywaniu komentarza na końcu wiersza w kluczu publicznym, umożliwiając porównanie tylko klucza.

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

Wynik będzie wyglądał jak jedna z tych linii.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Napisałem skrypt powłoki, którego użytkownicy używają do sprawdzania uprawnień do plików ~ / .ssh / i dopasowanego zestawu kluczy. Rozwiązuje moje problemy związane z incydentami użytkowników podczas konfigurowania ssh. To może ci pomóc. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Uwaga: moja poprzednia odpowiedź (z marca 2018 r.) Nie działa już z najnowszymi wydaniami openssh. Poprzednia odpowiedź: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)

Bradley Allen
źródło
Myślę, że powinieneś to rozwinąć, twój post jest naprawdę bliski stackoverflow.com/a/22595408/3102264
mpromonet
Krzyż wysłany do Server Fault: Jak sprawdzić, czy para kluczy publicznych / prywatnych RSA jest zgodna
Peter Mortensen
4

Jeśli jesteś w systemie Windows i chcesz użyć GUI, za pomocą puttygen możesz zaimportować do niego swój klucz prywatny:

wprowadź opis obrazu tutaj

Po zaimportowaniu możesz zapisać jego klucz publiczny i porównać go ze swoim.

Zac
źródło
1

Zaszyfruj coś za pomocą klucza publicznego i zobacz, który klucz prywatny to odszyfruje.

Ten artykuł dotyczący kodu projektu autorstwa Jeffa Atwooda implementuje uproszczone opakowanie wokół klas kryptograficznych .NET. Zakładając, że te klucze zostały utworzone do użytku z RSA, użyj asymetrycznej klasy z kluczem publicznym do szyfrowania i to samo z kluczem prywatnym do odszyfrowania.

Mitch Wheat
źródło
Szukam czegoś prostszego. Powiedzmy, powłoka, jedna wkładka lub tym podobne. Jestem na Linuksie i mam zainstalowane normalne rzeczy, takie jak openssl.
Loki
3
Jest to prawie tak przydatne, jak powiedzenie, że dodaj klucz publiczny do pliku authorised_keys i użyj ssh, aby zobaczyć, który klucz prywatny działa. Metoda działa, ale jest uciążliwa.
Bradley Kreider
0

Jeśli nic nie zwróci, pasują do:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
RoutesMaps.com
źródło
-2

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

user2987067
źródło
1
to nie pozwala na testowanie pary kluczy prywatno-publiczne
MatFiz