搞懂 PEM、ANS、PFX、P12、p8、CER、X509 等证书相关文件格式 后缀


http证书相关的文件格式、编码、概念比较偏多。这里对文件的各种文件后缀和格式做了统一的整理和解释说明

我在国密实验室申请下载了一个证书,解压后如下图,起初我是比较懵的,各种的文件让我一头雾水。下面我们将讲解一个各种文件格式后缀。

在这里插入图片描述

结论

.pem文件一种可阅读格式的文件(文本文件),文件内容可能代表的是证书、可能代表私钥等

.oca.pem: (中间)证书文件

.rca.pem:(根部)证书文件

.pfx: 一种归档文件,可以同时存储证书、私钥等内容,就比如上面的both.pfx其实就是其他所有文件的总和。

.cer:二进制格式的证书文件

crt.pem: PEM格式的证书文件,文本文件可阅读

.key: 二进制密钥文件,上图为私钥文件

.key.pem:PEM格式的密钥文件,上图中对应的文件为pkcs#1格式的PEM私钥文件

.key.p8:PEM格式的私钥文件,上图中对应的文件为pkcs#8格式的PEM私钥文件

区分上面两种格式的私钥文件很简单。

如果PEM格式指明是算法的私钥,那么就是pkcs#1格式,比如下面

-----BEGIN RSA PRIVATE KEY-----
....
-----END RSA PRIVATE KEY-----

如果没有指明那就是pkcs#8格式,比如下面的

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

因为国密是双证书体系,一个终端需要两份证书,一封是签名证书,一封是加密证书,所以在图片里面出现了两份终端证书

enc代表加密相关的,sig代表签名相关的。

比如上面的enc.key代表加密证书对应的私钥文件,enc.cer就是加密证书。

还有一点需要注意,文件名字由人而定,叫什么都不一定,我们就是以上图文件为例来说明我们证书相关的文件有哪些。

ASN.1

​ 全称为 Abstract Syntax Notation One (ASN.1) ,抽象语言,可用来描述数据结构,多用于描述加密方面的数据结构。这种ASN1描述的数据结构可以序列化和反序列化,进而来实现跨平台的传输。

​ ASN.1描述数据结构对于人来说是有可阅读性的,可以编码成二进制文件,对于机器来说也是可以读取的。

Foo协议描述例子:

FooProtocol DEFINITIONS ::= BEGIN

    FooQuestion ::= SEQUENCE {
        trackingNumber INTEGER,
        question       IA5String
    }

    FooAnswer ::= SEQUENCE {
        questionNumber INTEGER,
        answer         BOOLEAN
    }

END

ANS.1可以编码成二进制数据, 有多种编码规则 BERBasic Encoding Rules) 、DERDistinguished Encoding Rules)、CER(Canonical Encoding Rules)等

PEM

PEM 全称为 Privacy-Enhanced Mail ,是一种用于密码学相关的文件的格式。

​ 由于许多密码学相关的标准都是由 ASN.1 定义数据结构,然后用 Distinguished Encoding Rules (DER) 去序列化这些结构,序列的结果为二进制文件,比如证书、密钥等。纯二进制文件不易在网络中传输,在很多情况下也不套容易展示出来。一般我们通过Base64 或者HEX来编码二进制文件。PEM就使用了Base64编码了二进制文件。

​ PEM是把二进制数据通过Base64进行编码,然后再头部添加header -----BEGIN XXX----- 尾部添加footer -----END XXX-----。 header 和footer之间的数据就是被Base64编码的二进制数据。XXX 是要编码的数据内容类型,可以是 CERTIFICATECERTIFICATE REQUESTPRIVATE KEYX509 CRL

例:

-----BEGIN CERTIFICATE-----
MIIBzTCCAXCgAwIBAgIGAXKnMKNyMAwGCCqBHM9VAYN1BQAwSTELMAkGA1UEBhMC
Q04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRgwFgYDVQQDEw9S
b290Q0EgZm9yIFRlc3QwIhgPMjAxNTEyMzExNjAwMDBaGA8yMDM1MTIzMDE2MDAw
MFowSTELMAkGA1UEBhMCQ04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kv
U00yMRgwFgYDVQQDEw9Sb290Q0EgZm9yIFRlc3QwWTATBgcqhkjOPQIBBggqgRzP
VQGCLQNCAATj+apYlL+ddWXZ7+mFZXZJGbcJFXUN+Fszz6humeyWZP4qEEr2N0+a
Zdwo/21ft232yo0jPLzdscKB261zSQXSoz4wPDAZBgNVHQ4EEgQQnGnsD7oaOcWv
6CTrspwSBDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIAxjAMBggqgRzP
VQGDdQUAA0kAMEYCIQCEnW5BlQh0vmsOLxSoXYc/7zs++wWyFc1tnBHENR4ElwIh
AI1Lwu6in1ruflZhzseWulXwcITf3bm/Y5X1g1XFWQUH
-----END CERTIFICATE-----

一般PEM编码的数据会出现在 后缀为.pem 的文件中。也可能出现在其他后缀文件中,比如.cer(PEM编码的证书数据,有时候也不用PEM编码,直接就是二进制数据)、.crt(PEM编码的证书数据)文件。

还有一点就是,可以存放不同的内容类型的内容到同一个PEM文件。如下

a.pem

-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

我们可以通过PEM的头部和尾部去推到文件内容是什么,但是如果碰见这种文件后缀.key.pem.crt.pem.cer.pem。一般文件内容就很容易推导出了

.key.pem 密钥PEM编码数据。 crt.pem:证书的PEM编码数据 。 .cer.pem:证书的PEM编码数据。另外pem文件直接打开看header就可以知道它存储的是什么。

.pfx

介绍

​ 个人认为pfx文件不是证书,pfx是一种PKCS#12归档文件格式的一种后缀,PKCS #12文件格式的后缀为 :.p12 或者 .pfx

PKCS的意思为 Public-Key Cryptography Standards,也就是公钥加密标准(非对称加密标准) 。 PKCS#12为PKCS 的12号标准,它的名字为个人信息交换语法标准Personal Information Exchange Syntax Standard

PKCS#12规定了 一种归档文件格式,PKCS #12格式文件的前身是微软的PFX格式文件。PKCS #12格式文件可以存储证书(X509证书),私钥、废弃证书列表(CRL)、和一些可以自定义的信息(由实现者决定)。此文件可以被加密或者签名的,要想读取此文件可能需要解密。由此可见大家可以把此文件想象成一个存储数据的数据库,存储证书、私钥、CRL、自定义信息的数据,有特定的结构格式。

应用

​ 它通常被存储一个私钥和这个私钥相关的证书或者证书链

​ java9以后就会PCKS# 12 作为默认的keystore格式。

.p12

同上

.p8

.p8是 PKCS #8的文件格式后缀,PKCS #8格式的名字为私钥信息语法标准(Private-Key Information Syntax Standard)。

存储的私钥可以被加密,支持多密码加密。存储的内容是PEM 编码的格式。下图的文件其实就是PKCS #8格式的私钥PEM文件

-----BEGIN PRIVATE KEY-----
MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAq7BFUpkGp3+LQmlQ
.....

PkaxlEECIQCNymjsoI7GldtujVnr1qT+3yedLfHK
srDVjIT3LsvTqw==
-----END PRIVATE KEY-----

还有一些私钥文件指明了具体的算法,比如下面。EC代表数据Elliptic Curve ,就是椭圆曲线的意思。 指明算法的其实就是 PKCS #1格式的私钥

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIOUO8Ie5zWSXVvUMZPea9YuMNmPYLwbWYW.....
fOAH5brAl/HgLBhyQMwG7jMwNRN7CO+fwA==
-----END EC PRIVATE KEY-----

还有以 -----BEGIN RSA PRIVATE KEY----- 开头的文件,这就代表的是私钥类型是RSA的私钥。如果只是以-----BEGIN PRIVATE KEY-----开头的话,私钥类型就包含在数据里面。

.cer

存储X.509证书的文件,文件内容可以是 ASN.1- DER编码的二进制数据 也可以是ASN.1- DER编码的二进制数据再被PEM编码的数据。

.crt

存储X.509证书的文件,文件内容是ASN.1- DER编码的二进制数据然后再被PEM编码的数据。

X.509

书写中…

参考

百科

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值