Вопрос

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

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

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, а затем проверяю его содержимое, в начале и конце ключа появляются дополнительные символы. Это нормально?

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

Это было полезно?

Решение 2

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

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

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

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

Другие советы

Согласно сообщению в блоге здесь:

http : //stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-on-rails/

Вы можете просто сделать:

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

Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top