刚开始接触证书的时候,对于这几个词语 pem der crt cer pfx尤为的疑惑。研究了一番,总结如下。
一.名词解释
这里先介绍一下X.690,它是ITU-T标准,规定了几种ASN.1编码格式:
Basic Encoding Rules (BER)
Canonical Encoding Rules (CER)
Distinguished Encoding Rules (DER)
关于X.690知道上面的关系就可以了,在此我不做更多介绍。有兴趣的读者可以自行google。
注意,上面编码格式CER是一种和DER很相似的编码格式,与后文提到的.cer后缀没有任何关系。大家最好忘记它。
这里我们先看看wiki上对于DER和PEM是怎么说的。
1.DER (Distinguished Encoding Rules)
DER是BER的一个受限变体,用于为ASN.1中描述的数据结构生成明确的传输语法。与CER一样,DER编码也是有效的BER编码。DER除了删除了一个发送者选项外,其他的与BER完全相同。
DER是BER的子集,提供了一种准确编码ASN.1值的方法。DER适用于需要唯一编码情况,例如在加密中,确保需要进行数字签名的数据结构产生一个唯一的序列化表示。DER可以被认为是BER的规范形式。例如,在BER中,布尔值true可以编码为255个非零字节值中的任何一个,而在DER中,只有一种方法编码布尔值true。
DER被广泛的用户数字证书,例如X.509。
2.PEM (Privacy-Enhanced Mail)
pem 是一种基于一组定义“隐私增强邮件”的1993 IETF标准的文件格式,用于存储和发送加密密钥,证书和其他数据。虽然原始标准从未被广泛采用,并已经被PGP和S / MIME取代,但它们定义的文本编码方式流行起来了。PEM格式最终由IETF在RFC 7468中正式确定。
许多加密标准使用ASN.1来定义它们的数据结构,使用区分编码规则(Distinguished Encoding Rules,DER)来序列化这些结构。由于DER 产生二进制输出,它在传输结果文件通过只支持ASCII的系统系统时,具有很大的挑战性,比如通过电子邮件系统时。PEM格式则使用Base64编码二进制数据的方式解决了这个问题。PEM还定义了其文件格式
-----BEGIN (label) -----
...
-----END (label) -----
这个 label 决定了被编码消息的类型,通常这些类型有如下一些:
"CERTIFICATE", "CERTIFICATE REQUEST", "PRIVATE KEY" and "X509 CRL".
PEM 格式的数据通常存储在以 ".pem",".cer",".crt"(证书)或者".key"(公钥或私钥)为后缀的文件中。这个PEM文件中的lable字段比文件后缀名更加准确地代表了数据类型,因为许多不同类型的数据都可以保存在".pem"结尾的文件中。
一个PEM文件可能包含了多个实例。比如,一个操作系统可能提供一个含有一系列信任的"CA证书",或者web服务器可能配置了一个"证书链",该证书链包含了一个客户端证书加一系列的中间证书。
例子
一个PEM编码的证书文件:
-----BEGIN CERTIFICATE-----
MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G
A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y
aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0
ZSBhdXRob3JpdHkwHhcNMTEwNTIzMjAzODIxWhcNMTIxMjIyMDc0MTUxWjB9MQsw
CQYDVQQGEwJCRTEPMA0GA1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2Vy
dGlmaWNhdGUgYXV0aG9yaXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdu
dVRMUyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkwWTATBgcqhkjOPQIBBggqhkjOPQMB
BwNCAARS2I0jiuNn14Y2sSALCX3IybqiIJUvxUpj+oNfzngvj/Niyv2394BWnW4X
uQ4RTEiywK87WRcWMGgJB5kX/t2no0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud
DwEB/wQFAwMHBgAwHQYDVR0OBBYEFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqG
SM49BAMCA0gAMEUCIDGuwD1KPyG+hRf88MeyMQcqOFZD0TbVleF+UsAGQ4enAiEA
l4wOuDwKQa+upc8GftXE2C//4mKANBC6It01gUaTIpo=
-----END CERTIFICATE-----
一个 PEM编码的证书签名请求文件:
-----BEGIN CERTIFICATE REQUEST-----
MIICXTCCAUUCAQAwGDEWMBQGA1UEAwwNaGkgd2lraXBlZGlhITCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAMTwzCYD+iLlDwTu5Y43aQH9q1LF3kgot8I4
9ZgbFhDmCE4YlLhZKO4hieK6z8z+IfZjfapn01rzuzvTHESj5bSSU6AcEsKSOgTQ
uB+KKn4mgngyBrJwWjr4IZ9XkGsCLAP2/wkyJC2ire6FuTSQ00YGhKf1B3WbIBbn
5i1rvZXnYxlheWlNSmxx54q4gTwcd/V4nS4BThYA/ypATjHS/gfQ650cOQzRK/Jh
WfAbfnETYUpD6MCgZAIbaBuYvYpQEGqQ4niTvtSd07RHKnewcPFqJhMV86qN4HQY
4ZBNzQcF/2aCGHYyRniKznSDNijT2kaAz/L7ORqh+90qH/BLnKsCAwEAAaAAMA0G
CSqGSIb3DQEBCwUAA4IBAQAqV5g9AZGXEbM97ouTGDJqFNP2QjO9ZK9J3BOUTrFO
tMUrVWj+ixhC6vXD3o5uVL/fg6OlmK+13gsBpzg2mq72TBrZsNOK4+O0XvltIvSx
0H5tf1NYwuHxFgHDqgs/fQBOKFTadebJZHbPBtMrqlnenKYJiVb5YSWBZ7JKRCK7
VSgwNxxAMnSCNI0xF3EjZ1bjQkM8xGhnwe+n/RAd5Q2pMLIrquMoGMTUYLOq1xSB
sGTp8iLWbbWPl6gC1hcSMpFsbdyjMCWs+a2R2F8QnahrRfvpgFEndvzA2EvqHIoR
BHE1ChD7l691PxZP1eKA1I4AzZno5sb6SWyd8+pqY0oG
-----END CERTIFICATE REQUEST-----
3.PKCS (Public Key Cryptography Standards)
在密码学里,PKCS代表"Public Key Cryptography Standards"(公开密钥密码学标准)。这些是RSA Security LLC从上世纪90年代初开始设计并发布的一组公钥加密标准。该公司发布这些标准是为了推广使用他们拥有专利的加密技术,比如RSA算法、Schnorr签名算法和其他一些技术。虽然不是行业标准(因为公司保留了对它们的控制),但近年来,一些标准已经开始进入相关标准组织的“标准跟踪”过程,如IETF和PKIX工作组。
PKCS 标准概况
Version |
---|