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 ...

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.


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.


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.


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.


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ą.


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ę.


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)


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


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.


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.


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

-2

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


1
to nie pozwala na testowanie pary kluczy prywatno-publiczne
MatFiz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.