OpenSSL秘钥操作总结
公私钥生成
//生成2048位的RSA私钥
openssl genrsa -out private.pem 2048
//再由私钥生成公钥
openssl rsa -in private.pem -pubout -out public.pem
ssl证书转换cer转pem
//.pem证书转.cer证书
openssl x509 -outform der -in demo.pem -out demo.cer
//.cer证书转.pem证书
openssl x509 -inform der -in demo.cer -out demo.pem
证书格式介绍
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准 常用的有:
PKCS#7
:Cryptographic Message Syntax StandardPKCS#10
:Certification Request StandardPKCS#12
:Personal Information Exchange Syntax StandardX.509
:是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准PKCS#7
:常用的后缀是:.P7B .P7C .SPCPKCS#12
:常用的后缀有:.P12 .PFXX.509
:DER 编码(ASCII)的后缀是:.DER .CER .CRTX.509
:PAM 编码(Base64)的后缀是:.PEM .CER .CRT.cer/.crt
:是用于存放证书,它是2进制形式存放的,不含私钥.pem
:跟crt/cer的区别是它以Ascii来表示。pfx/p12
:用于存放个人证书/私钥,他通常包含保护密码,2进制方式p10
:是证书请求p7r
:是CA对证书请求的回复,只用于导入p7b
:以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥
关于证书后缀格式来自: https://www.chinassl.net/ssltools/convert-ssl-commands.html
使用OpenSSL进行转换
将PEM转换为CRT(.CRT文件)
openssl x509 -outform der -in certificate.pem -out certificate.crt
将DER文件(.crt .cer .der)转换为PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
将PEM转换为DER
openssl x509 -outform der -in certificate.pem -out certificate.der
将包含私钥和证书的PKCS#12文件(.pfx .p12)转换为PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
将PEM证书文件和私钥转换为PKCS#12(.pfx .p12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
将PEM转换为P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
将P7B转换为PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
将PEM转换为PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
将P7B转换为PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
将PFX转换为PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
通过OpenSSL生成RSA密钥
在命令行上使用OpenSSL,首先需要生成公钥和私钥,应该使用-passout
参数密码保护此文件,该参数可以采用许多不同的形式,可以请参阅OpenSSL文档。
openssl genrsa -out private.pem 1024
这将创建一个名为private.pem
的密钥文件,该文件使用1024位(bits)。该文件实际上同时具有私钥和公钥,可以从该文件中提取公共密钥:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
or
openssl rsa -in private.pem -pubout > public.pem
or
openssl rsa -in private.pem -pubout -out public.pem
现在public.pem
只包含公钥,可以和第三方自由地分享。可以通过使用公钥加密然后使用私钥进行解密来测试,首先我们需要一些数据做加密:
示例文件:
echo 'too many secrets' > file.txt
现在在file.txt
中有一些数据,可以使用OpenSSL和公钥进行加密:
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out encrypted.txt
这将创建一个加密版本的file.txt
,这个文件为encrypted.txt
(如果直接打开这个文件查看那么它看起来只是二进制垃圾,人类无法看懂)。然后可以使用私钥解密它:
openssl rsautl -decrypt -inkey private.pem -in encrypted.txt -out decrypted.txt
现在在decryptpted.txt
中便是未加密的内容:
cat decrypted.txt
|output -> too many secrets
典型样例
使用三重DES加密私钥:
openssl rsa -in key.pem -des3 -out keyout.pem
要删除RSA私钥上的密码短语:
openssl rsa -in key.pem -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
以RSAPublicKey格式输出私钥的公共部分:
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/summary-of-openssl-key-operations/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论