Bagaimana Anda menguji keypair DSA publik / swasta?

167

Apakah ada cara mudah untuk memverifikasi bahwa kunci privat yang diberikan cocok dengan kunci publik yang diberikan? Saya punya beberapa * .pub, dan beberapa * .key file, dan saya perlu memeriksa yang mana.

Sekali lagi, ini adalah file pub / key, DSA.

Saya benar-benar lebih suka satu-liner semacam ...

Loki
sumber

Jawaban:

259

Saya menemukan cara yang tampaknya bekerja lebih baik untuk saya:

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

perintah itu akan menampilkan kunci publik untuk kunci privat yang diberikan, jadi bandingkan saja keluarannya dengan setiap file * .pub.

Loki
sumber
2
apa sebenarnya yang dilakukan ini? Kenapa ssh?
sammiwei
2
mungkin karena dia menggunakan keypairs untuk otentikasi ssh
etarion
2
Dalam kasus saya, server pusat bekerja memiliki beberapa lusin id_rsa.pub.blahhostfile dan saya tidak tahu mana yang cocok dengan id_rsakunci pribadi tunggal & saya sedang mengatur scp tanpa kata sandi sehingga saya dapat bermigrasi dari situs web lama. Membuat pasangan kunci baru bukanlah suatu opsi; Saya sudah mengatur kunci saya dengan baik dan tidak akan mengacaukannya.
Chris K
1
Solusi ini tampaknya berfungsi untuk semua jenis kunci SSH. Saya bahkan berhasil memulihkan kunci publik yang salah tempat dengan pendekatan ini.
Jari Turkia
53

Saya selalu membandingkan hash MD5 dari modulus menggunakan perintah ini:

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

Jika hash cocok, maka kedua file tersebut berjalan bersamaan.

Robert
sumber
48

Untuk kunci DSA, gunakan

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

untuk mencetak kunci publik, lalu

 openssl dsa -in dsa.key -modulus -noout

untuk menampilkan kunci publik yang terkait dengan kunci pribadi, lalu bandingkan.

Martin v. Löwis
sumber
18

Dengan asumsi Anda memiliki kunci publik di dalam sertifikat x.509, dan dengan asumsi mereka adalah kunci RSA, maka untuk setiap kunci publik, lakukan

    openssl x509 -in certfile -modulus -noout

Untuk setiap kunci pribadi, lakukan

    openssl rsa -in keyfile -modulus -noout

Kemudian cocokkan kunci dengan modulus.

Martin v. Löwis
sumber
17

Pemeriksaan dapat dipermudah dengan diff:

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

Satu-satunya hal yang aneh adalah bahwa diff tidak mengatakan apa-apa jika file-nya sama, jadi Anda hanya akan diberi tahu jika publik dan pribadi tidak cocok.

John D.
sumber
3
Untuk mendapatkan hasil saat file cocok:diff -s
Roland
3
Ini jawaban yang sangat bagus. (1) diff -qsmengembalikan sederhana "yang identik / tidak identik jawaban (2) Anda harus menghapus komentar di file kunci publik sebelum menjalankan diff..
Emory
7

Hapus kunci publik dan buat yang baru dari kunci pribadi. Simpan di direktori yang berbeda, atau gunakan konvensi penamaan untuk membuatnya tetap lurus.

Bill the Lizard
sumber
3
Pertanyaannya adalah menanyakan cara memverifikasi dan perangkat yang akan kami verifikasi mungkin tidak memiliki fasilitas untuk membuat yang baru.
ArmenB
5

Masukkan perintah berikut untuk memeriksa apakah kunci pribadi dan kunci publik adalah himpunan yang cocok (identik) atau bukan yang cocok (berbeda) dalam direktori $ USER / .ssh. Perintah cut mencegah komentar pada akhir baris di kunci publik untuk dibandingkan, hanya memungkinkan kunci untuk dibandingkan.

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

Output akan terlihat seperti salah satu dari baris ini.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Saya menulis skrip shell yang digunakan pengguna untuk memeriksa izin file dari file ~ / .ssh / mereka dan set kunci yang cocok. Ini memecahkan tantangan saya dengan insiden pengguna mengatur ssh. Ini dapat membantu Anda. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Catatan: Jawaban saya sebelumnya (pada Maret 2018) tidak lagi berfungsi dengan rilis openssh terbaru. Jawaban sebelumnya: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)

Bradley Allen
sumber
Saya kira Anda harus menguraikan, posting Anda benar-benar dekat dengan stackoverflow.com/a/22595408/3102264
mpromonet
Cross diposting ke Server Fault: Cara memeriksa apakah kecocokan pasangan kunci publik / swasta RSA
Peter Mortensen
4

Jika Anda berada di Windows dan ingin menggunakan GUI, dengan puttygen Anda dapat mengimpor kunci pribadi Anda ke dalamnya:

masukkan deskripsi gambar di sini

Setelah diimpor, Anda dapat menyimpan kunci publiknya dan membandingkannya dengan milik Anda.

Zac
sumber
1

Enkripsi sesuatu dengan kunci publik, dan lihat kunci pribadi mana yang mendekripsi.

Ini artikel proyek kode oleh tak lain dari Jeff Atwood mengimplementasikan pembungkus disederhanakan sekitar kelas NET kripto. Dengan asumsi kunci ini dibuat untuk digunakan dengan RSA, gunakan kelas asimetris dengan kunci publik Anda untuk mengenkripsi, dan sama dengan kunci pribadi Anda untuk mendekripsi.

Mitch Wheat
sumber
Saya mencari sesuatu yang sedikit lebih sederhana. Katakanlah, satu shell liner atau sejenisnya. Saya di linux, dan memiliki hal-hal normal seperti openssl diinstal.
Loki
3
Itu hampir sama bermanfaatnya dengan mengatakan menambahkan kunci publik ke file otor_keys Anda dan menggunakan ssh untuk melihat kunci pribadi mana yang berfungsi. Metode ini berhasil, tetapi itu menyebalkan.
Bradley Kreider
0

Jika tidak mengembalikan apa pun, maka mereka cocok:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
RoutesMaps.com
sumber
-2

Cukup gunakan puttygen dan muat kunci pribadi Anda ke dalamnya. Menawarkan berbagai opsi, misalnya mengekspor kunci publik yang sesuai.

pengguna2987067
sumber
1
ini tidak memungkinkan untuk menguji keypair privat-publik
MatFiz