2008-10-25 26 views
5

I think Sé cómo crear claves RSA cifradas personalizadas, pero ¿cómo puedo leer una cifrada como ssh-keygen?Abrir una clave privada RSA de Ruby

Sé que puedo hacer esto:

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

Pero entonces OpenSSL me pide la contraseña ... ¿Cómo puedo pasar a OpenSSL como parámetro?

Y, ¿cómo puedo crear uno compatible con los generados por ssh-keygen?

que hacer algo como esto para crear las claves privadas cifradas:

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 

Además, las claves generadas por OpenSSL :: :: PKey RSA.new (1024) (sin cifrado), no funcionan cuando Intente iniciar sesión sin contraseña (es decir, copie la clave pública en el servidor y la privada para iniciar sesión).

Además, cuando abro un archivo ssh-keygen a través de OpenSSL y luego reviso su contenido, parece que tiene caracteres adicionales al principio y al final de la clave. ¿Esto es normal?

Realmente no entiendo algunas de estas cosas de seguridad, pero estoy tratando de aprender. ¿Qué es lo que estoy haciendo mal?

Respuesta

-3

He hecho algunos progresos en esto. Si utilizo la Red :: biblioteca SSH, puedo hacer esto:

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

Al leer el código fuente todavía tengo que averiguar lo que la biblioteca hace a PKey de OpenSSL :: RSA.new para lograr esto .. . Y luego voy y vuelvo a probar, y efectivamente, OpenSSL puede abrir la clave privada sin Net :: SSH ... He hecho tantas pruebas que de alguna manera no probé esto correctamente antes.

Pero todavía tengo el problema de crear un par de claves compatibles con SSH ... y tal vez voy a volver a probar y tener la respuesta: P ... nah, no estoy tan interesado en esa parte

Cuestiones relacionadas