Làm thế nào để bạn kiểm tra khóa DSA công khai / riêng tư?


167

Có cách nào dễ dàng để xác minh rằng khóa riêng đã cho khớp với khóa chung đã cho không? Tôi có một vài tệp * .pub và một vài tệp * .key và tôi cần kiểm tra xem cái nào đi với cái nào.

Một lần nữa, đây là các tập tin pub / key, DSA.

Tôi thực sự thích một lớp lót nào đó ...

Câu trả lời:


259

Tôi tìm thấy một cách có vẻ tốt hơn cho tôi:

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

lệnh đó sẽ xuất khóa chung cho khóa riêng đã cho, do đó chỉ cần so sánh đầu ra với mỗi tệp * .pub.


2
Điều này chính xác làm gì? Tại sao lại là ssh?
sammiwei

2
có lẽ bởi vì anh ta đang sử dụng bàn phím để xác thực ssh
etarion

2
Trong trường hợp của tôi, một máy chủ làm việc trung tâm có vài chục id_rsa.pub.blahhosttệp và tôi không biết cái nào khớp với id_rsakhóa riêng đơn lẻ và tôi đang thiết lập scp không mật khẩu để tôi có thể di chuyển khỏi các trang web cũ. Tạo một cặp khóa mới không phải là một lựa chọn; Tôi đã cài đặt chìa khóa của mình tốt và sẽ không làm hỏng nó.
Chris K

1
Giải pháp này dường như hoạt động cho tất cả các loại khóa SSH. Tôi thậm chí đã tìm cách khôi phục khóa công khai bị thất lạc với phương pháp này.
Jari Turkia

53

Tôi luôn so sánh hàm băm MD5 của mô đun bằng các lệnh sau:

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

Nếu băm khớp nhau, thì hai tệp đó đi cùng nhau.


48

Đối với khóa DSA, sử dụng

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

để in các khóa công khai, sau đó

 openssl dsa -in dsa.key -modulus -noout

để hiển thị các khóa chung tương ứng với khóa riêng, sau đó so sánh chúng.


18

Giả sử bạn có các khóa công khai bên trong các chứng chỉ x.509 và giả sử chúng là các khóa RSA, thì với mỗi khóa chung, hãy làm

    openssl x509 -in certfile -modulus -noout

Đối với mỗi khóa riêng, hãy làm

    openssl rsa -in keyfile -modulus -noout

Sau đó khớp các phím theo mô đun.


17

Việc kiểm tra có thể được thực hiện dễ dàng hơn với diff:

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

Điều kỳ lạ duy nhất là diff không nói gì nếu các tệp giống nhau, vì vậy bạn sẽ chỉ được thông báo nếu công khai và riêng tư không khớp.


3
Để nhận đầu ra khi các tệp khớp nhau:diff -s
Roland

3
Đây là một câu trả lời tuyệt vời. (1) diff -qstrả về một câu trả lời đơn giản "giống hệt / không giống hệt nhau. (2) bạn nên xóa nhận xét trong tệp khóa công khai trước khi chạy khác biệt
emory

7

Xóa các khóa công khai và tạo khóa mới từ khóa riêng. Giữ chúng trong các thư mục riêng biệt, hoặc sử dụng quy ước đặt tên để giữ cho chúng thẳng.


3
Câu hỏi đặt ra là làm thế nào để xác minh và thiết bị mà chúng tôi sẽ xác minh trên đó có thể không có phương tiện để tạo một thiết bị mới.
ArmenB

5

Nhập lệnh sau để kiểm tra xem khóa riêng và khóa chung có phải là tập hợp khớp (giống hệt) hay không phải là tập hợp khớp (khác nhau) trong thư mục $ USER / .ssh. Lệnh cắt ngăn không cho so sánh nhận xét ở cuối dòng trong khóa chung, chỉ cho phép so sánh khóa.

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

Đầu ra sẽ trông giống như một trong những dòng này.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Tôi đã viết một tập lệnh shell mà người dùng sử dụng để kiểm tra quyền của tập tin ~ / .ssh / tập tin của họ và bộ khóa khớp. Nó giải quyết những thách thức của tôi với các sự cố người dùng thiết lập ssh. Nó có thể giúp bạn. https://github.com/BradleyA/docker-security-infr Hạ tầng / trip / master / shsh

Lưu ý: Câu trả lời trước của tôi (vào tháng 3 năm 2018) không còn hoạt động với các bản phát hành mới nhất của openssh. Câu trả lời trước: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)


Tôi đoán bạn nên giải thích, bài viết của bạn thực sự gần với stackoverflow.com/a/22595408/3102264
mpromonet


4

Nếu bạn đang ở trong Windows và muốn sử dụng GUI, với puttygen, bạn có thể nhập khóa riêng của mình vào nó:

nhập mô tả hình ảnh ở đây

Sau khi nhập, bạn có thể lưu khóa công khai của nó và so sánh nó với khóa của bạn.


1

Mã hóa một cái gì đó bằng khóa chung và xem khóa riêng nào giải mã nó.

Bài viết dự án mã này không ai khác ngoài Jeff Atwood thực hiện một trình bao bọc đơn giản hóa xung quanh các lớp mật mã .NET. Giả sử các khóa này được tạo để sử dụng với RSA, hãy sử dụng lớp bất đối xứng với khóa chung của bạn để mã hóa và tương tự với khóa riêng của bạn để giải mã.


Tôi đang tìm kiếm một cái gì đó đơn giản hơn một chút. Nói, một vỏ một lót hoặc tương tự. Tôi đang dùng linux và đã cài đặt những thứ bình thường như openssl.
Loki

3
Điều đó gần như hữu ích khi nói thêm khóa công khai vào tệp ủy quyền của bạn và sử dụng ssh để xem khóa riêng nào hoạt động. Phương pháp này hoạt động, nhưng nó là một nỗi đau.
Bradley Kreider

0

Nếu nó không trả về gì, thì chúng khớp:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

-2

Chỉ cần sử dụng puttygen và tải khóa riêng của bạn vào đó. Cung cấp các tùy chọn khác nhau, ví dụ: xuất khóa công khai coressponding.


1
điều này không cho phép kiểm tra khóa riêng tư-công khai
MatFiz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.