如何使用OpenSSL提取公钥?

163
以下命令生成一个包含公钥和私钥的文件:

openssl genpkey -algorithm RSA -out private_key.pem

openssl genrsa -des3 -out privkey.pem 2048

来源:这里

使用OpenSSL,私钥包含公钥信息,因此不需要单独生成公钥

我们如何从privkey.pem文件中提取公钥?

谢谢。


1
@anish 不应该鼓励人们将私钥粘贴到随机的网络表单中。从安全角度来看,这是非常令人不安的,而且考虑到你建立了那个“工具”,这也是自我推销。请删除你的评论。 - aendra
6个回答

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

这会将公钥写入 key.pub 文件。


39
最好使用内部选项来执行此操作:-out,例如: openssl rsa -in privkey.pem -pubout -out key.pub,而不是将标准输出重定向到文件。 - Juan Antonio
3
@JuanAntonio,您能否解释一下为什么使用-out比重定向更好?非常感谢。 - Banoona
我想了解使用“-out”参数的原因。我认为转发输出总体上更好,因为这允许在不同的系统上运行命令并通过ssh连接将公钥传输到较不受信任的远程系统。当然,在出现权限问题时,“-out”参数可能能够发出更好的诊断信息。 - Mikko Rantalainen

164

39
谢谢。这正是我所需要的。要跳过提示,您可以使用 ssh-keygen -y -f key.pem > key.pub - makenova
7
这是正确的答案:ssh-keygen -y -f key.pem - Justin
2
@makenova 这将会重新生成key.pem中的密钥,这可能会阻止您登录需要该密钥的实例! - SubmittedDenied
1
有人能详细解释一下为什么AWS对上面的“正确答案”如此挑剔吗? - GreenLake4964
1
对我来说,AWS似乎不喜欢PEM格式的RSA公钥,而需要带有SSH语法的密钥。两者之间的差异非常小:使用PEM时,base64编码的密钥具有一个英文前缀和一个英文后缀;SSH语法具有前缀ssh-rsa,嵌套附加前缀用二进制零表示的base64编码,以及ssh-rsa没有换行符和后缀。 SSH文件格式是专门为SSH设计的。我猜它不使用PEM格式是由于历史原因。 - Mikko Rantalainen
显示剩余2条评论

12

对于那些对细节感兴趣的人,您可以通过执行以下操作查看公钥文件(如上所述生成)中的内容:

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

或者对于私钥文件,使用以下内容:

openssl rsa -noout -text -in key.private

该函数将密钥的实际组成部分(模数、指数、质数等)作为文本输出到控制台。


4

对于AWS导入现有的公钥,

  1. Export from the .pem doing this... (on 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 中工作。


5
如果你需要将这种格式转换为 ssh-rsa AAAAB3NzaC1y....,运行命令:ssh-keygen -f PublicKey.pub -i -m PKCS8。请注意,我已经对原文进行了翻译,没有添加任何额外的解释或内容。 - Rafael Milewski

2

如果您想将Amazon AWS的 .pem 密钥对复制到另一个区域,请按照以下步骤操作:

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 CLI 接受该密钥之前将其删除。 - jpsecher

2
使用openssl从pem文件中提取pub文件,方法如下:
openssl x509 -inform pem -in private_key.pem -pubkey -noout > public_key.pub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接