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

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.


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.


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.


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.


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.


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.


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)


Saya kira Anda harus menguraikan, posting Anda benar-benar dekat dengan stackoverflow.com/a/22595408/3102264
mpromonet


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.


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.


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

-2

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


1
ini tidak memungkinkan untuk menguji keypair privat-publik
MatFiz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.