Como extrair a chave pública usando OpenSSL?

120

O comando a seguir gera um arquivo que contém as chaves pública e privada:

openssl genrsa -des3 -out privkey.pem 2048

Fonte: aqui

Com o OpenSSL, a chave privada também contém as informações da chave pública, portanto, uma chave pública não precisa ser gerada separadamente

Como podemos extrair a chave pública do arquivo privkey.pem?

Obrigado.

Jake
fonte
Esta ferramenta online é legal 8gwifi.org/pempublic.jsp
anish

Respostas:

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

Que grava a chave pública para key.pub

ensopado
fonte
23
Sempre é melhor usar a opção interna para fazer isso:, -outpor exemplo: em openssl rsa -in privkey.pem -pubout -out key.pubvez de redirecionar o stdout para um arquivo.
Juan Antonio
138

Porém, a técnica acima funciona para o caso geral, ela não funcionou em arquivos PEM da Amazon Web Services (AWS).

Encontrei nos documentos da AWS o seguinte comando funciona: ssh-keygen -y

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

editar Obrigado @makenova pela linha completa:

ssh-keygen -y -f key.pem > key.pub
lababidi
fonte
38
Obrigado. Isso é o que eu precisava. Para pular as solicitações, você pode usarssh-keygen -y -f key.pem > key.pub
makenova
5
Esta é a resposta corretassh-keygen -y -f key.pem
Justin
1
isso está me pedindo uma senha longa, mas eu não coloquei nenhuma senha
kavain
1
@makenova Isso irá regenerar a chave key.pem, o que pode impedir você de fazer login em instâncias que requerem essa chave!
Enviado
Se você teve o mesmo problema que @kavain, onde ele pede a senha que você não colocou, e você está usando sua chave ssh -i, certifique-se de fazer um link para sua chave privada, não a pública
aexl
5

Para os interessados ​​nos detalhes - você pode ver o que está dentro do arquivo de chave pública (gerado conforme explicado acima), fazendo isto: -

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

ou para o arquivo de chave privada, isto: -

openssl rsa -noout -text -in key.private

que mostra como texto no console os componentes reais da chave (módulo, expoentes, primos, ...)

cnd
fonte
2

Se você está procurando como copiar um .pempar de chaves Amazon AWS em uma região diferente, faça o seguinte:

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

Então

aws ec2 import-key-pair --key-name amazon-aws --public-key-material '$(cat .ssh/amazon-aws.pub)' --region us-west-2
Justin
fonte
2
A saída da chave pública por opensslé ensanduichada em cabeçalhos PEM, que você terá que remover antes que o AWS CLI aceite a chave.
JP
2

Para AWS importando uma chave pública existente,

  1. Exporte do .pem fazendo isso ... (no linux)

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

Isso produzirá um arquivo que se você abrir em um editor de texto parecido com este ...

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn/8y3uYCQxSXZ58OYceG
A4uPdGHZXDYOQR11xcHTrH13jJEzdkYZG8irtyG+m3Jb6f9F8WkmTZxl+4YtkJdN
9WyrKhxq4Vbt42BthadX3Ty/pKkJ81Qn8KjxWoL+SMaCGFzRlfWsFju9Q5C7+aTj
eEKyFujH5bUTGX87nULRfg67tmtxBlT8WWWtFe2O/wedBTGGQxXMpwh4ObjLl3Qh
bfwxlBbh2N4471TyrErv04lbNecGaQqYxGrY8Ot3l2V2fXCzghAQg26Hc4dR2wyA
PPgWq78db+gU3QsePeo2Ki5sonkcyQQQlCkL35Asbv8khvk90gist4kijPnVBCuv
cwIDAQAB
-----END PUBLIC KEY-----
  1. No entanto, a AWS NÃO aceitará esse arquivo.

    Você tem que remover o -----BEGIN PUBLIC KEY-----e -----END PUBLIC KEY-----do arquivo. Salve e importe e ele deve funcionar na AWS.

Bendo
fonte
4
e se você precisar converter este formato para ssh-rsa AAAAB3NzaC1y....rodar:ssh-keygen -f PublicKey.pub -i -mPKCS8
Rafael Milewski