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.