Tengo la clave id_rsa.pub generada por ssh-keygen. ¿Cómo puedo convertir de manera programática los archivos id_rsa.pub a las claves formateadas RSA DER?Convertir clave pública RSA a RSA DER
Respuesta
Si usa ssh-keygen para generar una clave:
$ ssh-keygen
a continuación, puedes usar OpenSSL para extraer la clave pública y escribir en el formato DER así:
$ openssl rsa -in id_rsa -out pub.der -outform DER -pubout
writing RSA key
puede ver la salida DER como PEM como esta:
$ openssl rsa -in pub.der -inform DER -pubin -text
no consumo Ruby, así que no sé lo fácil que es utilizar OpenSSL de Ruby.
Editar: Respondí muy rápido: escribió id_rsa.pub y es posible que no tenga el ID_rsa. Otra pregunta sobre el desbordamiento de pila corresponde a la conversión inversa, pero el código fuente que se encuentra allí podría ayudar: Convert pem key to ssh-rsa format Una vez que tenga PEM, puede usar openssl para convertir el PEM en DER.
Edición, mayo de 2014: Ruby se ha convertido en mi lenguaje de programación favorito, y la pregunta original (desde su edición) le preguntó acerca de Ruby. Aquí está el código para leer el id_rsa.pub (clave pública) y escribir una, clave generada OpenSSL-DER-formateado pública:
require 'openssl'
require 'base64'
def read_length(s)
# four bytes, big-endian
length = s[0..3].unpack('N')[0]
end
def read_integer(s, length)
# shift all bytes into one integer
s[4..3 + length].unpack('C*').inject { |n, b| (n << 8) + b }
end
def cut(s, length)
s[4 + length..-1]
end
def decode_pub(pub)
# the second field is the Base64 piece needed
s = Base64.decode64(pub.split[1])
# first field reading "ssh-rsa" is ignored
i = read_length(s)
s = cut(s, i)
# public exponent e
i = read_length(s)
e = read_integer(s, i)
s = cut(s, i)
# modulus n
i = read_length(s)
n = read_integer(s, i)
[ e, n ]
end
def make_asn1(e, n)
# Simple RSA public key in ASN.1
e0 = OpenSSL::ASN1::Integer.new(e)
n1 = OpenSSL::ASN1::Integer.new(n)
OpenSSL::ASN1::Sequence.new([ e0, n1 ])
end
pub = File.read('id_rsa.pub')
asn1 = make_asn1(*decode_pub(pub))
# Let OpenSSL deal with converting from the simple ASN.1
key = OpenSSL::PKey::RSA.new(asn1.to_der)
# Write out the public key in both PEM and DER formats
File.open('id_rsa.pem', 'w') { |f| f.write key.to_pem }
File.open('id_rsa.der', 'w') { |f| f.write key.to_der }
Puede comprobar la salida con estos comandos openssl en la cáscara:
$ openssl rsa -pubin -text -in id_rsa.pem
$ openssl rsa -pubin -text -inform DER -in id_rsa.der
Si sólo tiene acceso a la clave pública generada por ssh-keygen, y desea convertirlo a formato DER, las siguientes obras:
ssh-keygen -f id_rsa.pub -e -m PKCS8 | openssl pkey -pubin -outform DER
Thi s primero usa ssh-keygen
para convertir la clave al formato PKCS8 PEM, luego usa openssl pkey
para convertir eso al formato DER.
(Esto logra lo mismo que la respuesta de Jim Flood, pero sin tocar el archivo de clave privada.)
Dijo * "¿Cómo puedo convertir programáticamente archivos id_rsa.pub a claves formateadas RSA DER?" *. Él no pidió órdenes para hacerlo. – jww
Además, no funciona en todas las distribuciones –
- 1. Cifrado RSA usando la clave pública
- 2. Encriptación de la clave AES con la clave pública RSA
- 3. Encriptación RSA en C#: ¿Qué parte define la clave pública?
- 4. ssh-rsa validación de clave pública utilizando una expresión regular
- 5. Extraer datos de la clave pública de RSA
- 6. Encriptación RSA con clave pública codificada en base64 en Android
- 7. Encriptación con clave privada RSA en Java
- 8. Uso de una clave pública de RSA para descifrar una cadena cifrada con la clave privada de RSA
- 9. Cargue la clave RSA privada codificada PEM en Crypto ++
- 10. Cómo almacenar una clave pública en un contenedor de clave RSA a nivel de máquina
- 11. ¿Cómo podemos convertir una cadena de PEM a Der formato
- 12. Encriptar/descifrar RSA
- 13. Abrir una clave privada RSA de Ruby
- 14. Crear una clave pública rsa a partir de su módulo y exponente
- 15. Flash SecureSocket y la clave privada de RSA
- 16. Lectura de PEM Clave pública de RSA Solo usando Bouncy Castle
- 17. Cifrado RSA: Java a PHP
- 18. Generar clave privada RSA en C#
- 19. Uso de RSA en Python
- 20. Tamaño de firma RSA?
- 21. Cargar claves RSA desde los archivos
- 22. Cómo recuperar una clave pública RSA de una matriz de bytes []?
- 23. enviar la clave pública RSA para iPhone y utilizarlo para cifrar
- 24. Intentando usar claves RSA para SSH en EC2, obteniendo: identificador RSA1 incorrecto ... permiso denegado (clave pública)
- 25. Implementando RSA completo en Python
- 26. base 64 codificados de clave pública para verificar la firma RSA
- 27. Cómo cargar la clave pública RSA desde el archivo en C#
- 28. ¿Cómo convierto una clave XML RSA en un archivo PEM?
- 29. Cómo leer una clave pública RSA en PEM + PKCS # 1 formato
- 30. Convertir clave privada tradicional PEM a clave privada PKCS8
¡Buena solución, gracias! –