Как извлечь открытый ключ с помощью OpenSSL?

120

Следующая команда создает файл, содержащий как открытый, так и закрытый ключ:

openssl genrsa -des3 -out privkey.pem 2048

Источник: здесь

В OpenSSL закрытый ключ также содержит информацию об открытом ключе, поэтому открытый ключ не нужно создавать отдельно.

Как мы можем извлечь открытый ключ из файла privkey.pem?

Спасибо.

Джейк
источник
Это крутой онлайн-инструмент 8gwifi.org/pempublic.jsp
аниш

Ответы:

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

Это записывает открытый ключ в key.pub

stewe
источник
23
Всегда лучше использовать для этого внутренний параметр: -outнапример: openssl rsa -in privkey.pem -pubout -out key.pubвместо перенаправления stdout в файл.
Хуан Антонио
138

Хотя описанный выше метод работает в общем случае, он не работает с файлами PEM Amazon Web Services (AWS).

Я нашел в документах AWS, что работает следующая команда: ssh-keygen -y

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

edit Спасибо @makenova за полную строку:

ssh-keygen -y -f key.pem > key.pub
lababidi
источник
38
Спасибо. Это то, что мне нужно. Чтобы пропустить подсказки, вы можете использоватьssh-keygen -y -f key.pem > key.pub
makenova
5
Это правильный ответssh-keygen -y -f key.pem
Джастин
1
это прошу меня ключевую фразу, но я не ставил какую - либо фразы
kavain
1
@makenova Это восстановит ключ key.pem, что может помешать вам войти в экземпляры, требующие этого ключа!
ОтправленоОтказано
Если у вас та же проблема, что и у @kavain, когда он запрашивает кодовую фразу, которую вы не ввели, и вы используете свой ключ ssh -i, убедитесь, что вы
ссылаетесь
5

Для тех, кто интересуется деталями - вы можете увидеть, что находится внутри файла открытого ключа (сгенерированного, как описано выше), выполнив следующие действия: -

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

или для файла закрытого ключа это: -

openssl rsa -noout -text -in key.private

который выводит в виде текста на консоль фактические компоненты ключа (модуль, показатель степени, простые числа, ...)

CND
источник
2

Если вы хотите скопировать .pemпару ключей Amazon AWS в другой регион, сделайте следующее:

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

затем

aws ec2 import-key-pair --key-name amazon-aws --public-key-material '$(cat .ssh/amazon-aws.pub)' --region us-west-2
Джастин
источник
2
Вывод открытого ключа opensslзаключен в заголовки PEM, которые необходимо удалить, прежде чем интерфейс командной строки AWS примет ключ.
JP
2

Для AWS, импортирующего существующий открытый ключ,

  1. Экспорт из .pem делает это ... (в Linux)

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

Это создаст файл, который, если вы откроете его в текстовом редакторе, выглядит примерно так ...

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn/8y3uYCQxSXZ58OYceG
A4uPdGHZXDYOQR11xcHTrH13jJEzdkYZG8irtyG+m3Jb6f9F8WkmTZxl+4YtkJdN
9WyrKhxq4Vbt42BthadX3Ty/pKkJ81Qn8KjxWoL+SMaCGFzRlfWsFju9Q5C7+aTj
eEKyFujH5bUTGX87nULRfg67tmtxBlT8WWWtFe2O/wedBTGGQxXMpwh4ObjLl3Qh
bfwxlBbh2N4471TyrErv04lbNecGaQqYxGrY8Ot3l2V2fXCzghAQg26Hc4dR2wyA
PPgWq78db+gU3QsePeo2Ki5sonkcyQQQlCkL35Asbv8khvk90gist4kijPnVBCuv
cwIDAQAB
-----END PUBLIC KEY-----
  1. Однако AWS НЕ примет этот файл.

    Вы должны удалить -----BEGIN PUBLIC KEY-----и -----END PUBLIC KEY-----из файла. Сохраните его и импортируйте, и он должен работать в AWS.

Bendo
источник
4
и если вам нужно преобразовать этот формат для ssh-rsa AAAAB3NzaC1y....запуска:ssh-keygen -f PublicKey.pub -i -mPKCS8
Рафаэль Милевски