如何使用 Openssl 创建一对密钥对
如何使用 Openssl 创建一对密钥对
使用 openssl 创建一对 RSA 密钥
使用 openssl 创建一对 SM2 密钥
关于格式
PEM
–Openssl
使用PEM
(Privacy Enhanced Mail
) 格式来存放各种信息, 它是openssl
默认采用的信息存放方式。Apache
和NGINX
服务器偏向于使用这种编码格式。Openssl
中的PEM
文件一般包含如下信息:- 内容类型:表明本文件存放的是什么信息内容,它的形式为
----- BEGIN XXXX -----
,与结尾的----- END XXXX -----
对应; - 头信息:表明数据是如果被处理后存放,
openssl
中用的最多的是加密信息,比如加密算法以及初始化向量iv
。 - 信息体:为
Base64
编码的数据。可以包括所有私钥(RSA
和DSA
)、公钥(RSA
和DSA
)和 (x509
) 证书。它存储用Base64
编码的DER
格式数据,用ascii
报头包围,因此适合系统之间的文本模式传输。
- 内容类型:表明本文件存放的是什么信息内容,它的形式为
DER
- 编码规则 (DER
) 可包含所有私钥、公钥和证书。Java
和Windows
服务器偏向于使用这种编码格式。它是大多数浏览器的缺省格式,并按ASN1 DER
格式存储。它是无报头的, 而PEM
是用文本报头包围的DER
。
过程
- 生成私钥
# RSA
openssl genpkey -algorithm RSA -quiet -outform PEM -pkeyopt rsa_keygen_bits:2048 \
-out rsa_openssl_root_certificate_private_key.pem
# SM2
openssl genpkey -algorithm EC -quiet -outform PEM -pkeyopt ec_paramgen_curve:sm2 \
-out sm2_openssl_root_certificate_private_key.pem
- 利用私钥生成公钥
# RSA
openssl pkey -pubout -inform PEM -outform PEM \
-in rsa_openssl_root_certificate_private_key.pem \
-out rsa_openssl_root_certificate_public_key.pem
# SM2
openssl pkey -pubout -inform PEM -outform PEM \
-in sm2_openssl_root_certificate_private_key.pem \
-out sm2_openssl_root_certificate_public_key.pem
- 密钥格式转换
# RSA
openssl pkey -inform PEM -outform DER \
-in rsa_openssl_root_certificate_private_key.pem \
-out rsa_openssl_root_certificate_private_key.der
openssl pkey -inform DER -outform PEM \
-in rsa_openssl_root_certificate_private_key.der \
-out rsa_openssl_root_certificate_private_key.convert.pem
# SM2
openssl pkey -inform PEM -outform DER \
-in sm2_openssl_root_certificate_private_key.pem \
-out sm2_openssl_root_certificate_private_key.der
openssl pkey -inform DER -outform PEM \
-in sm2_openssl_root_certificate_private_key.der \
-out sm2_openssl_root_certificate_private_key.convert.pem
- 私钥转换成 Java 能处理的 PKCS#8 格式
# RSA
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt \
-in rsa_openssl_root_certificate_private_key.pem \
-out rsa_openssl_root_certificate_private_key_pkcs8.pem
# SM2
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt \
-in sm2_openssl_root_certificate_private_key.pem \
-out sm2_openssl_root_certificate_private_key_pkcs8.pem
- 私钥加密码
# RSA
openssl pkey -aes256 -passout pass:ImAPassword -inform PEM -outform PEM \
-in rsa_openssl_certificate_private_key.pem \
-out rsa_openssl_certificate_private_key_encipher.pem
# SM2
openssl pkey -aes256 -passout pass:ImAPassword -inform PEM -outform PEM \
-in sm2_openssl_certificate_private_key.pem \
-out sm2_openssl_certificate_private_key_encipher.pem
- 私钥去除密码
# RSA
openssl pkey -passin pass:ImAPassword -inform PEM -outform PEM \
-in rsa_openssl_certificate_private_key_encipher.pem \
-out rsa_openssl_certificate_private_key_decipher.pem
# SM2
openssl pkey -passin pass:ImAPassword -inform PEM -outform PEM \
-in sm2_openssl_certificate_private_key_encipher.pem \
-out sm2_openssl_certificate_private_key_decipher.pem
- 私钥改密码
# RSA
openssl pkey -passin pass:ImAPassword -aes256 -passout pass:ImAPasswordToo \
-inform PEM -outform PEM \
-in rsa_openssl_certificate_private_key_encipher.pem \
-out rsa_openssl_certificate_private_key_encipher2.pem
# SM2
openssl pkey -passin pass:ImAPassword -aes256 -passout pass:ImAPasswordToo \
-inform PEM -outform PEM \
-in sm2_openssl_certificate_private_key_encipher.pem \
-out sm2_openssl_certificate_private_key_encipher2.pem