如何使用 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