Pergunta

I pensar Eu sei como criar chaves RSA personalizado criptografados, mas como posso ler um criptografado como ssh-keygen faz?

Eu sei que posso fazer isso:

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

Mas então OpenSSL me pede a senha ... Como posso passá-lo para OpenSSL como parâmetro?

E, como eu posso criar um compatível com os gerados por ssh-keygen?

eu fazer algo assim para criar chaves privadas criptografadas:

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

Além disso, as chaves geradas pelo OpenSSL :: PKEY :: RSA.new (1024) (sem criptografia), não funcionam quando tento logins sem senha (ou seja, eu copiar a chave pública para o servidor e usar o um privado para login).

Além disso, quando eu abrir um arquivo ssh-keygen via OpenSSL e depois verificar o seu conteúdo, que parece ter caracteres adicionais no início e no final da chave. Isso é normal?

Eu não realmente compreender algumas dessas coisas de segurança, mas eu estou tentando aprender. O que é que eu estou fazendo errado?

Foi útil?

Solução 2

Eu tenho feito alguns progressos sobre este assunto. Se eu usar a biblioteca Net :: SSH, eu posso fazer isso:

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

Ao ler o código fonte que eu ainda tenho que descobrir o que a biblioteca faz para do OpenSSL PKEY :: RSA.new para alcançar este objetivo ... E então eu vou e teste novamente, e com certeza, OpenSSL pode abrir a chave privada muito bem sem Net :: SSH ... fiz testes tanto que de alguma forma eu não testei isso corretamente antes.

Mas eu ainda tenho o problema de criar um par de chaves SSH compatível ... e talvez eu vou testar novamente e ter a resposta: P ... nah, eu não sou tão interessado em que parte

Outras dicas

De acordo com o post aqui:

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

Você pode simplesmente fazer:

OpenSSL :: PKEY :: RSA.new (File.read ( 'private_key'), 'senha')

O melhor de sorte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top