使用 OpenSSL 生成 RSA 公私钥
2019/07/16
生成 RSA 公私钥
1、生成 RSA 私钥
openssl genrsa -out rsa_2048_priv.pem 2048
注意:OpenSSL3.0
及以后的版本在使用上述命令生成 RSA 私钥时,默认格式为PKCS8
格式。
2、生成 RSA 公钥
openssl rsa -in rsa_2048_priv.pem -pubout -out rsa_2048_pub.pem
3、将 RSA 私钥转成PKCS8
格式(如果使用的 OpenSSL 版本 > = 3.0
则可跳过此步)
openssl pkcs8 -topk8 -inform PEM -in rsa_2048_priv.pem -outform PEM -nocrypt -out rsa_2048_priv_pkcs8.pem
一般来说,现在主流的几大编程语言基本都支持 PKCS8 格式,如果某些小众编程语言只支持PKCS1
格式,那么可以通过下面的操作将 PKCS8 格式转换成 PKCS1 格式。
openssl rsa -in rsa_2048_priv_pkcs8.pem -out rsa_2048_priv_pkcs1.pem
生成证书和私钥
openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -config "D:\Packages\openssl\share\openssl.cnf" -days 750 -out cert.crt -subj "/C=CN/ST=省份拼音/L=市拼音/O=公司英文名称/OU=公司英文名称/CN=域名/emailAddress=公司邮箱" openssl x509 -in cert.crt -outform der -out cert.der openssl x509 -inform der -in cert.der -out cert.pem openssl x509 -outform der -in cert.pem -out cert.cer openssl pkcs12 -export -out my.pfx -inkey rsa_private.key -in cert.crt
说明:此处的-newkey
是选项的名称,不能修改,下面的也是一样。
生成 cert 和 pfx 文件
openssl req -newkey rsa:1024 -nodes -keyout rsa_private.key -x509 -config "D:\Packages\openssl\share\openssl.cnf" -days 750 -out cert.cer -subj "/C=CN/ST=省份拼音/L=市拼音/O=公司英文名称/OU=公司英文名称/CN=域名/emailAddress=公司邮箱" openssl pkcs12 -export -in cert.cer -inkey rsa_private.key -out my.pfx
生成第三方支付机构支持的 cert 和 pfx 文件
1. 生成不含密码保护的私钥:
openssl genrsa -out private-rsa.key 1024 或 openssl genrsa -out private-rsa.key 2048
2. 生成证书
openssl req -new -x509 -key private-rsa.key -days 750 -out public-rsa.cer -config "D:\Packages\openssl\share\openssl.cnf"
3. 生成 PKCS12 格式
openssl pkcs12 -export -in public-rsa.cer -inkey private-rsa.key -out 1.pfx
4. 提取密钥对(如果 pfx 证书已加密,会提示输入密码。)
openssl pkcs12 -in 1.pfx -nocerts -nodes -out 1.key
5. 从密钥对提取私钥
openssl rsa -in 1.key -out 1_pri.key
6. 从密钥对提取公钥
openssl rsa -in 1.key -pubout -out 1_pub.key
7. 因为 RSA 算法使用的是 pkcs8 模式补足,需要将提取的私钥转换成 pkcs8 格式
openssl pkcs8 -in 1_pri.key -out 1_pri_pkcs8.pem -outform pem -nocrypt -topk8
将 pfx 转成一个 cer
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
第三方支付机构的 cert 证书转换成 pem 公钥
openssl x509 -inform pem -in 99billcert.cer -pubkey -noout > 99billcert_publickey.pem