1、openssl genrsa --help 用于生成一个 RSA私钥 (同openssl-genrsa),PEM编码格式
openssl genrsa [-help] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-F4] [-f4] [-3] [-primes num] [-verbose] [-quiet] [-traditional] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [numbits]
-out filename 指定私钥输出的文件明,如果不指定将输出到标准输出
-verbose 输出更多额外信息
-quiet 输出更少信息
-aes128/-aes191 当生成私钥的时候,有的时候会选择对该私钥进行加密,这些就是可以选择的加密算法,当使用这些加密的时候,必须要指定-passout 密码,如果不显示指定密码,shell会交互式的让你输入密码
-passout arg 用于指定输出密钥文件的密码,密码格式pass:password,即使不使用上述加密算法也可以使用密码
-traditional 默认是输出PKCS#8格式的私钥,但是当指定此选项的时候会输出传统的PKCS#1格式的私钥
numbits 用于指定私钥的大小,该选项必须是最后一个选项,默认大小是2048,最小为512
# 加密
openssl genrsa -out test.key -passout pass:abcd1234 -aes128 1024
# 加密、需要交互式输入密码
openssl genrsa -out test.key -aes128 1024
# 不加密但是使用密码
openssl genrsa -out test.key -passout pass:abcd1234 1024
# 不使用密码
openssl genrsa -out test.key 1024
上述方式生成的私钥格式是PEM格式的,非加密私钥文件内容格式如下:
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCxImyGkSj2rB7zSNSM/2h4dg5tpJNGwJDQLE/PNKQtkorMgrbI
...
-----END RSA PRIVATE KEY-----
加密私钥文件内容如下:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,8775D04B98C9C9EE
zx8ehH7qey+588/UVCKu37NFzMvYCBJr9jrryhg7AJtU9eKxFlDIAVNVvNqgG8k+
a5H4a7TCmHB15coFJH52tpmqdGdfo5+758QEgax/YLTPrlBufatb7ZOOpexvJMUe
.................................
-----END RSA PRIVATE KEY-----
2、 openssl rsa 处理有关rsa私钥的命令
openssl rsa [-help] [-inform DER|PEM|P12|ENGINE] [-outform DER|PEM] [-in filename|uri] [-passin arg] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-traditional] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-pvk-strong] [-pvk-weak] [-pvk-none] [-engine id] [-provider name] [-provider-path path] [-propquery propq]
-in filename|uri 指定输入的RSA私钥文件,如不指定该选项则使用标准输入,如果该私钥文件被加密过,则需要指定密码(如果未被加密但却使用了密码是不需要密码的)
-out filename 指定输出文件写入私钥,如果不指定该选项将输出到标准输出,如果使用了加密算法则需要指定密码,注意输入文件名和输出文件名尽量不要一致
-passin arg 指定输入文件的密码
-passout arg 指定输出文件的密码
-pubin 默认情况下rsa命令的输入都是私钥,如果加上此选项,读取的就是公钥;如果输入的是私钥而不是公钥,将读取该私钥的公钥部分
-pubout 默认情况下rsa命令输出的都是私钥,如果加上此选项私钥对应的公钥将会被输出,如果输入项是一个公钥,那么此选项将会被自动设置
-check 检查私钥的连续性
-text 以text的格式打印出公钥或者私钥的内容,而不是加密后的版本
-noout 阻止输出公私钥加密后的版本
-modulus 输出该私钥的modulus 值
-aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea 指定假面算法
-inform DER|PEM|P12|ENGINE 指定输入文件的格式,默认情况是不指定的
-outform DER|PEM 指定输出文件的格式,默认是PEM
# 移除key.pem私钥的密码,将加密的私钥转换成非加密的私钥
openssl rsa -in key.pem -out keyout.pem
# 使用新的加密算法加密该私钥
openssl rsa -in key.pem -des3 -out keyout.pem
# 将PEM格式的私钥转换成DER格式的私钥
openssl rsa -in key.pem -outform DER -out keyout.der
# 打印出该私钥的组件
openssl rsa -in key.pem -text -noout
# 打印出该私钥的公钥部分,即从私钥提取公钥,由私钥生成对应的公钥
openssl rsa -in key.pem -pubout -out pubkey.pem
如何区分DER与PEM格式呢
区分DER与PEM格式的方式如下,并且cat一个der格式的文件是乱码,cat一个PEM格式的文件是字符串,
[yiifung@master01 ssl]$ file test.der
test.der: data
[yiifung@master01 ssl]$ file test.key
test.key: PEM RSA private key
[yiifung@master01 ssl]$