OpenSSL秘钥操作总结

公私钥生成

1
2
3
4
5
//生成2048位的RSA私钥
openssl genrsa -out private.pem 2048

//再由私钥生成公钥
openssl rsa -in private.pem -pubout -out public.pem

ssl证书转换cer转pem

1
2
3
4
5
//.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 Standard
  • PKCS#10:Certification Request Standard
  • PKCS#12:Personal Information Exchange Syntax Standard
  • X.509:是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准
  • PKCS#7:常用的后缀是:.P7B .P7C .SPC
  • PKCS#12:常用的后缀有:.P12 .PFX
  • X.509:DER 编码(ASCII)的后缀是:.DER .CER .CRT
  • X.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文件)

1
openssl x509 -outform der -in certificate.pem -out certificate.crt

将DER文件(.crt .cer .der)转换为PEM

1
openssl x509 -inform der -in certificate.cer -out certificate.pem

将PEM转换为DER

1
openssl x509 -outform der -in certificate.pem -out certificate.der

将包含私钥和证书的PKCS#12文件(.pfx .p12)转换为PEM

1
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)

1
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

将PEM转换为P7B

1
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer

将P7B转换为PEM

1
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

将PEM转换为PFX

1
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

将P7B转换为PFX

1
2
3
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

1
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

通过OpenSSL生成RSA密钥

在命令行上使用OpenSSL,首先需要生成公钥和私钥,应该使用-passout参数密码保护此文件,该参数可以采用许多不同的形式,可以请参阅OpenSSL文档。

1
openssl genrsa -out private.pem 1024

这将创建一个名为private.pem的密钥文件,该文件使用1024位(bits)。该文件实际上同时具有私钥和公钥,可以从该文件中提取公共密钥:

1
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

or

1
openssl rsa -in private.pem -pubout > public.pem

or

1
openssl rsa -in private.pem -pubout -out public.pem

现在public.pem只包含公钥,可以和第三方自由地分享。可以通过使用公钥加密然后使用私钥进行解密来测试,首先我们需要一些数据做加密:

示例文件:

1
echo 'too many secrets' > file.txt

现在在file.txt中有一些数据,可以使用OpenSSL和公钥进行加密:

1
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out encrypted.txt

这将创建一个加密版本的file.txt,这个文件为encrypted.txt(如果直接打开这个文件查看那么它看起来只是二进制垃圾,人类无法看懂)。然后可以使用私钥解密它:

1
openssl rsautl -decrypt -inkey private.pem -in encrypted.txt -out decrypted.txt

现在在decryptpted.txt中便是未加密的内容:

1
2
cat decrypted.txt
|output -> too many secrets

典型样例

使用三重DES加密私钥:

1
openssl rsa -in key.pem -des3 -out keyout.pem

要删除RSA私钥上的密码短语:

1
openssl rsa -in key.pem -out keyout.pem

将私钥从PEM转换为DER格式:

1
openssl rsa -in key.pem -outform DER -out keyout.der

将私钥的组件输出到标准输出:

1
openssl rsa -in key.pem -text -noout

要输出私钥的公共部分:

1
openssl rsa -in key.pem -pubout -out pubkey.pem

以RSAPublicKey格式输出私钥的公共部分:

1
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :