2008-10-25 5 views
5

I думаю Я знаю, как создать пользовательские зашифрованные ключи RSA, но как я могу читать один зашифрованный, как ssh-keygen?Открытие закрытого ключа RSA от Ruby

Я знаю, что могу это сделать:

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

Но OpenSSL просит у меня ключевую фразу, ... Как я могу передать его в OpenSSL в качестве параметра?

И как я могу создать один совместимый с теми, которые были сгенерированы ssh-keygen?

я сделать что-то вроде этого, чтобы создавать частные зашифрованные ключи:

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 

Кроме того, ключи, сгенерированные OpenSSL :: PKey :: RSA.new (1024) (без шифрования), не работают, когда я попробуйте пароли без входа (т. е. я копирую открытый ключ на сервер и использую закрытый для входа в систему).

Также, когда я открываю файл ssh-keygen через OpenSSL, а затем проверяю его содержимое, он, как представляется, содержит дополнительные символы в начале и конце ключа. Это нормально?

Я действительно не понимаю некоторые из этих материалов безопасности, но я пытаюсь учиться. Что я делаю неправильно?

ответ

-3

Я достиг некоторого прогресса в этом вопросе. Если я использую Net :: SSH библиотеки, я могу это сделать:

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

Читая исходный код, который я до сих пор понять, что библиотека делает для PKEY OpenSSL, :: RSA.new для достижения этой цели .. . И затем я снова и снова проверю, и, конечно же, OpenSSL может открыть закрытый ключ просто отлично, не используя Net :: SSH ... Я сделал так много тестов, что почему-то я не проверял это правильно раньше.

Но у меня все еще есть проблема с созданием пары ключей, совместимой с SSH ... и, может быть, я снова испытаю тест и получаю ответ: P ... nah, меня не интересует эта часть