openssl生成rsa公私密钥

生成pkcs8私钥

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pkcs8.key

生成的私钥格式如下:

-----BEGIN PRIVATE KEY-----

pkcs8私钥内容

-----END PRIVATE KEY-----

pkcs8私钥转为pkcs1私钥

openssl rsa -in private.pkcs8.key -out private.pkcs1.key

实际测试过程中openssl版本不同,由pkcs8私钥转pkcs1私钥的结果会有不同

例如:openssl version

OpenSSL 1.1.1a 20 Nov 2018

-----BEGIN RSA PRIVATE KEY-----

pkcs1私钥内容

-----END RSA PRIVATE KEY-----

该版本转化前和转化后,由pkcs8私钥转得的pkcs1私钥,和其转换的来源pkcs8私钥,两者格式(即上下BEGIN和END-----里面的内容-----)和密钥内容都不一样。


openssl version

OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023)

-----BEGIN PRIVATE KEY-----

pkcs1私钥内容(和pkcs8私钥内容一模一样)

-----END PRIVATE KEY-----

但该版本由pkcs8私钥转得的pkcs1私钥,和其转换的来源pkcs8私钥,两者的不管是格式还是密钥内容一模一样。由此推定该版本的openssl生成的私钥都是pkcs8格式标准的。

从上面pkcs8私钥中获取pkcs8公钥

openssl rsa -in private.pkcs8.key -pubout -out public.pkcs8.pem

该命令在不同版本openssl间产生的同样格式,

-----BEGIN PUBLIC KEY-----

pkcs8公钥内容

-----END PUBLIC KEY-----

把pkcs8公钥转换为pkcs1公钥

openssl rsa -pubin -in public.pkcs8.pem -RSAPublicKey_out -out public.pkcs1.pem

该命令在不同版本openssl间产生的同样格式,但pkcs8公钥内容和由其转得的pkcs1公钥内容不一样。

-----BEGIN RSA PUBLIC KEY-----

pkcs1公钥内容

-----END RSA PUBLIC KEY-----

生成私钥

openssl genrsa -out private.pem 2048

该命令在不同版本(OpenSSL 1.1.1a 20 Nov 2018和OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023))间,前一个版本会生成pkcs1的私钥,后者会生成pkcs8的私钥。

查看公钥信息

openssl rsa -in public.pem -pubin -text -noout

查看私钥信息

openssl rsa -in private.pem -text -noout

RSA公钥格式PKCS#1,PKCS#8互转说明

PKCS#1 转 PKCS#8: openssl rsa -RSAPublicKey_in -in -pubout

PKCS#8 转 PKCS#1: openssl rsa -pubin -in -RSAPublicKey_out

PHP技术分享
请先登录后发表评论
  • latest comments
  • 总共0条评论