Tengo un problema al generar una clave pública que la PEM_read_bio_RSA_PUBKEY()
función openssl puede consumir. Sigo recibiendo errores.
Obviamente, no puedo simplemente usar la cadena ASCII en el ssh-keygen <>.pub
archivo de clave, ya que está en formato de archivo SSH o tal vez la SubjectPublicKeyInfo
estructura.
Aquí está el código genérico clave: ssh-keygen -t rsa -b 1024 -C "Test Key"
Encontré un convertidor en php en la web que convertirá el contenido de la clave pública en un formato de cadena base64 PEM ASCII. Sin embargo, la función todavía no le gusta.
La documentación de Openssl establece:
- "Función RSA_PUBKEY () que procesa una clave pública utilizando una estructura EVP_PKEY"
- "Las funciones RSA_PUBKEY también procesan una clave pública RSA utilizando una estructura RSA"
¿Cómo obtengo mi clave pública OpenSSH en cualquier formato que la función OpenSSL la consuma?
Respuestas:
¡OKAY!
Así que entré en este pensamiento "Fácil, tengo esto". Resulta que hay mucho más de lo que pensaba.
Entonces, el primer problema es que (de acuerdo con las páginas de manual para OpenSSL (man 3 pem)), OpenSSL espera que la clave RSA esté en formato PKCS # 1. Claramente, esto no es con lo que ssh-keygen está trabajando. Tienes dos opciones (de buscar alrededor).
Si tiene OpenSSH v. 5.6 o posterior (no lo hice en mi computadora portátil), puede ejecutar esto:
El método más largo para hacer esto es separar su clave SSH en sus diversos componentes (la entrada del blog que encontré en esto acusa a OpenSSH de ser "propietaria", prefiero llamarla "única") y luego usar una biblioteca ASN1 para intercambiar cosas.
Afortunadamente para ti, alguien escribió el código para hacer esto:
https://gist.github.com/1024558
fuente
ssh-keygen
método parece funcionar en Linux pero no en Mac OS X.ssh -V
.OpenSSH_6.2p2
. Cómo funciona enOpenSSH_6.6p1
.-m
no funciona para mí ... ¿cuál es el trabajo?Suponiendo que tiene la clave privada SSH
id_rsa
, puede extraer la clave pública de esta manera:Me doy cuenta de que el OP preguntó sobre la conversión de una clave pública, por lo que esto no responde a la pregunta, sin embargo, pensé que sería útil para algunos de todos modos.
Tenga en cuenta también que este comando da como resultado un formato de clave pública PEM, que generalmente es lo que OpenSSL espera. La respuesta de Brian, por otro lado, da como resultado un archivo en formato RSAPublicKey, que no es el formato normal esperado por OpenSSL (aunque las versiones posteriores aparentemente pueden leerlo a través de la
-RSAPublicKey_in
bandera). Para convertir puedes hacer esto:fuente
openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pem
también funciona (es decir, la entrada es clave privada en formato pem). Buena respuesta.-m pkcs8
la que, a pesar de la gente OpenSSH utilizando el nombre equivocado hace productos X.509 'pubkey'. Además, desde OpenSSH 6.5 en 2014-01 si el creador especificó 'nuevo formato'-o
para una mejor seguridad, este método no funcionará, y dado que 7.8 en 2018-08 'nuevo formato' ahora es el predeterminado, lo mismo.El formato que desea es lo que
ssh-keygen
llamaPKCS8
. Entonces el siguiente comando producirá la salida deseada:Desde la
ssh-keygen
página del manual:fuente
Similar al método de Amal Chaudhuri a continuación, esto es lo que funcionó para mí. Necesitaba crear un archivo pem a partir de la clave pública ssh que había generado para mi cliente SFTP (Cyberduck).
fuente
id_rsa
ya está en el formato correcto, puede verificarlo usted mismo, el resultadoid_rsa.pem
es 100% idéntico.Otra forma de hacer esto desde otro sitio. Publicar esto en caso de que necesite otro método. Funciona muy bien http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html
fuente
id_rsa
No es una clave pública. Respuesta incorrecta.