密钥和证书格式转换

私钥和证书可以以多种格式保存,所以你经常需要进行格式互转。常用格式如下:

二进制(DER)证书和密钥-Binary Certificate/Key

包含原始格式的X.509证书或密钥,使用DER ASN.1编码

ASCII(PEM)证书和密钥

包含base64编码的DER证书或密钥,以 -----BEGIN CERTIFICATE/KEY-----开头和 -----END CERTIFICATE/KEY-----结尾。通常一个文件包含一个证书。 有时会带有其他元数据(比如保护密码使用的算法)

PKCS#7证书

用户传输签名或者加密过的数据的一种复杂格式。在RFC2315中定义。通常后缀是.p7b,.p7c,可以包含整个证书链。java的keytools工具支持这个格式

PKCS#12(PFX)密钥和证书

通常后缀是.p12或者.pfx, 用来保存和保护服务器的密钥,包括整个证书链。是微软产品中使用的通用格式,也用于客户端证书。

PEM和DER互转

$ openssl x509 -inform PEM -in fd.pem -outform DER -out fd.der

$ openssl x509 -inform DER -in fd.der -outform PEM -out fd.pem

PEM和PFX互转

$ openssl pkcs12 -export \ -name "My Certificate" \ -out fd.p12 \ -inkey fd.key \ -in fd.crt \ -certfile fd-chain.crt

以上命令把密钥(fd.key),证书(fd.crt)和中间证书(fd-chain.crt)全部打包转成一个p12文件

$ openssl pkcs12 -in fd.p12 -out fd.pem -nodes

以上命令把所有的内容都输出成fd.pem, 你需要手动分离里面的不同内容(密钥,证书,证书链)

也可以通过分别调用openssl命令提取不同文件

$ openssl pkcs12 -in fd.p12 -nocerts -out fd.key -nodes

$ openssl pkcs12 -in fd.p12 -nokeys -clcerts -out fd.crt

$ openssl pkcs12 -in fd.p12 -nokeys -cacerts -out fd-chain.crt

PKCS#7和PEM互转

$ openssl crl2pkcs7 -nocrl -out fd.p7b -certfile fd.crt -certfile fd-chain.crt

$ openssl pkcs7 -in fd.p7b -print_certs -out fd.pem

results matching ""

    No results matching ""