Pregunta

Yo pienso Sé cómo crear claves RSA cifradas personalizadas, pero ¿cómo puedo leer una cifrada como hace ssh-keygen?

Sé que puedo hacer esto:

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

Pero luego OpenSSL me pide la frase de contraseña ... ¿Cómo puedo pasarla a OpenSSL como parámetro?

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

Hago algo como esto para crear 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 intento los inicios de sesión sin contraseña (es decir, copio la clave pública al servidor y uso el privado para iniciar sesión).

Además, cuando abro un archivo ssh-keygen a través de OpenSSL y luego verifico su contenido, parece tener caracteres adicionales al principio y al final de la clave. ¿Es esto normal?

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

¿Fue útil?

Solución 2

He progresado un poco en esto. Si uso la biblioteca Net :: SSH, puedo hacer esto:

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

Al leer el código fuente, todavía tengo que averiguar qué hace la biblioteca con PKey :: RSA de OpenSSL. Nuevo para lograr esto ... Y luego voy y hago una prueba nuevamente, y por supuesto, OpenSSL puede abrir la clave privada bien sin Net :: SSH ... He hecho tantas pruebas que de alguna manera no lo he probado correctamente antes.

Pero todavía tengo el problema de crear un par de claves compatible con SSH ... y quizás me haga la prueba nuevamente y tenga la respuesta: P ... nah, no estoy tan interesado en esa parte

Otros consejos

De acuerdo con la publicación del blog aquí:

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

Simplemente puedes hacer:

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

La mejor de las suertes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top