1、生成密钥对
1.1 生成私钥
使用genrsa
指令生成私钥,指定模的长度为 2048 bit(256byte)。
openssl genrsa -out privkey.pem 2048
1.2 生成公钥
使用rsa
指令生成公钥,关键的选项为-pubout
,告诉openssl
需要输出的文件为公钥文件。
openssl rsa -in privkey.pem -pubout -out pubkey.pem
2、生成待加密/签名明文
这只是用来测试加解密的明文,你也可以用其它形式的明文替代
echo penghuikang@foxmail.com > info.txt
3、公钥加密/私钥解密
3.1 使用公钥对明文进行加密
使用rsautl
指令及-encrypt
选项对明文进行加密,-pubin
选项告诉openssl
通过-inkey
选项传入的密钥为公钥,因为如果没有该选项,openssl
默认认为-inkey
传入的是私钥。
openssl rsautl -encrypt -in info.txt -inkey pubkey.pem -pubin -out info.txt.enc
如果你需要使用一个x509证书中的RSA公钥的进行加密,则使用-certin
选项来代替-pubin
,以此来告诉openssl
通过-inkey
选项传入的是一个带RSA公钥的证书,使用证书中的RSA公钥进行加密。
openssl rsautl -encrypt -in info.txt -inkey pubkey.pem -certin -out info.txt.enc
3.2 使用私钥解密
使用rsautl
指令及-decrypt
选项对明文进行解密,如上所述,此时不需要传入-pubin
选项,因为此时-inkey
传入的是私钥。
openssl rsautl -decrypt -in info.txt.enc -inkey privkey.pem -out info_decrypt.txt
4、私钥签名/公钥验签
4.1 使用私钥对明文进行签名
使用rsautl
指令、-sign
选项及-inkey
指定的私钥对明文进行签名,得到签名文件info.txt.sign
。
openssl rsautl -sign -in info.txt -inkey privkey.pem -out info.txt.sign
4.2 使用公钥验签得到明文
使用rsautl
指令、-verify
选项及-inkey
指定的公钥对密文进行验证,并得到明文文件info_verify.txt
。
openssl rsautl -verify -in info.txt.sign -inkey pubkey.pem -pubin -out info_verify.txt