2008-10-25 34 views
5

Tôi nghĩ Tôi biết cách tạo khóa RSA được mã hóa tùy chỉnh, nhưng làm cách nào tôi có thể đọc mã được mã hóa như ssh-keygen?Mở khóa riêng RSA từ Ruby

Tôi biết tôi có thể làm điều này:

OpenSSL::PKey::RSA.new(File.read('private_key')) 

Nhưng sau đó OpenSSL hỏi tôi cho mật khẩu ... Làm thế nào tôi có thể vượt qua nó để OpenSSL như một tham số?

Và, làm thế nào tôi có thể tạo một cái tương thích với những cái được tạo bởi ssh-keygen?

tôi làm điều gì đó như thế này để tạo ra các phím mã hóa tin:

pass = '123456' 
key = OpenSSL::PKey::RSA.new(1024) 
key = "0000000000000000#{key.to_der}" 
c = OpenSSL::Cipher::Cipher.new('aes-256-cbc') 
c.encrypt 
c.key = Digest::SHA1.hexdigest(pass).unpack('a2' * 32).map {|x| x.hex}.pack('c' * 32) 
c.iv = iv 
encrypted_key = c.update(key) 
encrypted_key << c.final 

Ngoài ra, các phím được tạo ra bởi OpenSSL :: PKEY :: RSA.new (1024) (không mã hóa), không hoạt động khi tôi thử đăng nhập ít mật khẩu hơn (ví dụ, tôi sao chép khóa công khai vào máy chủ và sử dụng khóa riêng để đăng nhập).

Ngoài ra, khi tôi mở tệp ssh-keygen qua OpenSSL và sau đó kiểm tra nội dung của nó, nó dường như có các ký tự bổ sung ở đầu và cuối của khóa. Điều này có bình thường không?

Tôi không thực sự hiểu một số công cụ bảo mật này, nhưng tôi đang cố gắng tìm hiểu. Tôi đang làm gì sai?

Trả lời

-3

Tôi đã thực hiện một số tiến bộ về vấn đề này. Nếu tôi sử dụng Net :: thư viện SSH, tôi có thể làm điều này:

Net::SSH::KeyFactory.load_private_key 'keyfile', 'passphrase' 

Bằng cách đọc mã nguồn tôi vẫn chưa tìm ra những gì thư viện nào để PKEY OpenSSL của :: RSA.new để thực hiện điều này .. Và sau đó tôi đi và kiểm tra lại, và chắc chắn đủ, OpenSSL có thể mở khóa riêng tư mà không cần Net :: SSH ... Tôi đã thực hiện rất nhiều bài kiểm tra mà bằng cách nào đó tôi đã không kiểm tra điều này một cách chính xác trước đây.

Nhưng tôi vẫn gặp vấn đề tạo cặp khóa tương thích SSH ... và có thể tôi sẽ kiểm tra lại và có câu trả lời: P ... nah, tôi không quan tâm đến phần đó

Các vấn đề liên quan