¿Cómo extraer la clave pública usando OpenSSL?

120

El siguiente comando genera un archivo que contiene tanto la clave pública como la privada:

openssl genrsa -des3 -out privkey.pem 2048

Fuente: aquí

Con OpenSSL, la clave privada también contiene la información de la clave pública, por lo que no es necesario generar una clave pública por separado.

¿Cómo podemos extraer la clave pública del archivo privkey.pem?

Gracias.

Jake
fuente
Esta herramienta en línea es genial 8gwifi.org/pempublic.jsp
anish

Respuestas:

188
openssl rsa -in privkey.pem -pubout > key.pub

Que escribe la clave pública para key.pub

Stewe
fuente
23
Siempre es mejor usar la opción interna para hacer esto:, -outpor ejemplo: en openssl rsa -in privkey.pem -pubout -out key.publugar de redirigir stdout a un archivo.
Juan Antonio
138

Sin embargo, la técnica anterior funciona para el caso general, no funcionó en archivos PEM de Amazon Web Services (AWS).

Encontré en los documentos de AWS el siguiente comando funciona: ssh-keygen -y

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html

editar Gracias @makenova por la línea completa:

ssh-keygen -y -f key.pem > key.pub
lababidi
fuente
38
Gracias. Este es el deseo que necesitaba. Para omitir las indicaciones, puede usarssh-keygen -y -f key.pem > key.pub
makenova
5
Esta es la respuesta correctassh-keygen -y -f key.pem
Justin
1
Esto me está pidiendo una frase de contraseña, pero no puse ninguna frase de contraseña
kavain
1
@makenova ¡Esto regenerará la clave key.pem, lo que podría evitar que inicie sesión en instancias que requieran esa clave!
Enviado
Si tienes el mismo problema que @kavain, donde te pide la frase de contraseña que no pusiste, y estás usando tu clave ssh -i, asegúrate de estar enlazando a tu clave privada allí, no a la pública
aexl
5

Para aquellos interesados ​​en los detalles, pueden ver qué hay dentro del archivo de clave pública (generado como se explicó anteriormente), haciendo esto: -

openssl rsa -noout -text -inform PEM -in key.pub -pubin

o para el archivo de clave privada, esto: -

openssl rsa -noout -text -in key.private

que genera como texto en la consola los componentes reales de la clave (módulo, exponentes, primos, ...)

cnd
fuente
2

Si busca cómo copiar un .pempar de claves de Amazon AWS en una región diferente, haga lo siguiente:

openssl rsa -in .ssh/amazon-aws.pem -pubout > .ssh/amazon-aws.pub

Luego

aws ec2 import-key-pair --key-name amazon-aws --public-key-material '$(cat .ssh/amazon-aws.pub)' --region us-west-2
Justin
fuente
2
La salida de la clave pública de opensslse intercala en los encabezados PEM, que deberá eliminar antes de que la AWS CLI acepte la clave.
JP
2

Para AWS que importa una clave pública existente,

  1. Exportar desde el .pem haciendo esto ... (en linux)

    openssl rsa -in ./AWSGeneratedKey.pem -pubout -out PublicKey.pub
    

Esto producirá un archivo que si abre en un editor de texto con un aspecto como este ...

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn/8y3uYCQxSXZ58OYceG
A4uPdGHZXDYOQR11xcHTrH13jJEzdkYZG8irtyG+m3Jb6f9F8WkmTZxl+4YtkJdN
9WyrKhxq4Vbt42BthadX3Ty/pKkJ81Qn8KjxWoL+SMaCGFzRlfWsFju9Q5C7+aTj
eEKyFujH5bUTGX87nULRfg67tmtxBlT8WWWtFe2O/wedBTGGQxXMpwh4ObjLl3Qh
bfwxlBbh2N4471TyrErv04lbNecGaQqYxGrY8Ot3l2V2fXCzghAQg26Hc4dR2wyA
PPgWq78db+gU3QsePeo2Ki5sonkcyQQQlCkL35Asbv8khvk90gist4kijPnVBCuv
cwIDAQAB
-----END PUBLIC KEY-----
  1. Sin embargo, AWS NO aceptará este archivo.

    Tienes que quitar el -----BEGIN PUBLIC KEY-----y -----END PUBLIC KEY-----del archivo. Guárdelo e importe y debería funcionar en AWS.

Bendo
fuente
4
y si necesita convertir este formato para ssh-rsa AAAAB3NzaC1y....ejecutar:ssh-keygen -f PublicKey.pub -i -mPKCS8
Rafael Milewski