1.1. RSA 密钥管理
该文章根据 CC-BY-4.0 协议发表,转载请遵循该协议。
本文地址:https://fenying.net/book/pki-tutorials/1.1.manage-rsa-keys/
本章节介绍如何使用 OpenSSL 生成、转换、编码、加密、解密 RSA 密钥。
生成 RSA 私钥
生成 RSA 私钥一般使用 OpenSSL 的 genrsa
子命令。
比如,生成一个文件名为 rsa-p1-raw.pem
RSA 私钥文件,配置如下:
Property | Value |
---|---|
Bits | 2048 |
Cipher | AES-256-CFG |
Standard | PKCS#1 |
Encoding | PEM |
1openssl genrsa -aes-256-cfb -out ./rsa-p1.pem 2048
如果不传递任何对称加密算法标志(如
-aes-256-cfb
),则会生成一个不带加密保护的裸私钥。
常用参数
-outform
指定输出的文件格式,可以取值 PEM
和 DER
之一。
-rand
指定用于生成随机数的随机种子文件路径。
规范转换
PKCS#1 -> PKCS#8
1openssl pkcs8 \
2 -topk8 \
3 -inform PEM \
4 -outform PEM \
5 -in rsa-p1.pem \
6 -out rsa-p8.pem
默认使用
-v2 aes256
参数进行加密,如果转换之后的密钥不需要加密保护,则加上-nocrypt
,如:
1openssl pkcs8 \
2 -topk8 \
3 -inform PEM \
4 -outform PEM \
5 -nocrypt \
6 -in rsa-p1.pem \
7 -out rsa-p8-raw.pem
PKCS#8 -> PKCS#1
1openssl rsa \
2 -aes-256-cfb \
3 -in rsa-p8.pem \
4 -out rsa-p1.pem
如果转换之后的密钥不需要加密保护,则去掉如
-aes-256-cfb
的加密算法标志,如:
1openssl rsa \
2 -in rsa-p8.pem \
3 -out rsa-p1-raw.pem
默认输入和输出编码都是
PEM
,如果输入的 DER 请指定-inform DER
,需要输出 DER 请指定-outform DER
。
编码转换
PKCS#1: PEM <=> DER
e.g. PEM -> DER
,反之亦然
1openssl rsa \
2 -inform PEM \
3 -outform DER \
4 -in rsa-p1-raw.pem \
5 -out rsa-p1-raw.der
PKCS#8: PEM <=> DER
OpenSSL 对 PKCS#8
的 DER 编码支持不完善,请勿使用。
加密/解密私钥
加密 PKCS#1 私钥
1openssl rsa \
2 -inform PEM \
3 -aes-256-cfb \
4 -in rsa-p1-raw.pem \
5 -out rsa-p1.pem
解密 PKCS#1 私钥
1openssl rsa \
2 -inform PEM \
3 -in rsa-p1.pem \
4 -out rsa-p1-raw.pem
加密 PKCS#8 私钥
1openssl pkcs8 \
2 -topk8 \
3 -inform PEM \
4 -v2 aes256 \
5 -in rsa-p8-raw.pem \
6 -out rsa-p8.pem
解密 PKCS#8 私钥
1openssl pkcs8 \
2 -inform PEM \
3 -in rsa-p8.pem \
4 -out rsa-p8-raw.pem
提取公钥
1openssl rsa \
2 -inform PEM \
3 -in rsa-p1-raw.pem \
4 -pubout \
5 -out rsa-p1.pub
其中
-in
可以传递PKCS#1
或PKCS#8
的密钥。
查看公钥信息
1openssl rsa \
2 -inform PEM \
3 -pubin \
4 -text \
5 -noout \
6 -in rsa-p1.pub
查看私钥信息
1openssl rsa \
2 -inform PEM \
3 -noout \
4 -text \
5 -in rsa-p1.pem
测试密钥
1# 生成一个随机文件
2openssl rand -out tmp.dat 4096
3
4# 使用私钥对该随机文件进行 RSA-SHA-256 签名
5openssl dgst -sha256 -sign rsa-p1.pem -out tmp.dat.sig tmp.dat
6
7# 验证签名
8openssl dgst -sha256 -verify rsa-p1.pub -signature tmp.dat.sig tmp.dat
以上便是 RSA 密钥的生成、转换、编码、加密、解密、提取公钥、查看公钥信息、查看私钥信息、测试密钥的方法。
comments powered by Disqus