跳到主要内容

5. Textual Encoding of Certificates (证书的文本编码)

5.1. Encoding (编码)

公钥证书 (Public-key certificates) 使用 "CERTIFICATE" 标签进行编码。编码的数据必须是 BER (强烈推荐使用 DER; 请参见附录 B) 编码的 ASN.1 Certificate 结构, 如 [RFC5280] 第 4 节所述。

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

图 6: 证书示例

历史上, 标签 "X509 CERTIFICATE" 以及不太常见的 "X.509 CERTIFICATE" 已被使用。符合本文档的生成器必须生成 "CERTIFICATE" 标签, 并且绝对不能生成 "X509 CERTIFICATE" 或 "X.509 CERTIFICATE" 标签。解析器不应该将 "X509 CERTIFICATE" 或 "X.509 CERTIFICATE" 视为等同于 "CERTIFICATE", 但一个有效的例外可能是为了向后兼容 (可能与警告一起)。

5.2. Explanatory Text (解释性文本)

已知许多工具会在 PKIX 证书的 BEGIN 行之前和 END 行之后发出解释性文本, 比任何其他类型都多。如果发出, 这样的文本应该与证书相关, 例如提供证书中关键数据元素的文本表示。

Subject: CN=Atlantis
Issuer: CN=Atlantis
Validity: from 7/9/2012 3:10:38 AM UTC to 7/9/2013 3:10:37 AM UTC
-----BEGIN CERTIFICATE-----
MIIBmTCCAUegAwIBAgIBKjAJBgUrDgMCHQUAMBMxETAPBgNVBAMTCEF0bGFudGlz
MB4XDTEyMDcwOTAzMTAzOFoXDTEzMDcwOTAzMTAzN1owEzERMA8GA1UEAxMIQXRs
YW50aXMwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAu+BXo+miabDIHHx+yquqzqNh
Ryn/XtkJIIHVcYtHvIX+S1x5ErgMoHehycpoxbErZmVR4GCq1S2diNmRFZCRtQID
AQABo4GJMIGGMAwGA1UdEwEB/wQCMAAwIAYDVR0EAQH/BBYwFDAOMAwGCisGAQQB
gjcCARUDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDAzA1BgNVHQEE
LjAsgBA0jOnSSuIHYmnVryHAdywMoRUwEzERMA8GA1UEAxMIQXRsYW50aXOCASow
CQYFKw4DAh0FAANBAKi6HRBaNEL5R0n56nvfclQNaXiDT174uf+lojzA4lhVInc0
ILwpnZ1izL4MlI9eCSHhVQBHEp2uQdXJB+d5Byg=
-----END CERTIFICATE-----

图 7: 带解释性文本的证书示例

5.3. File Extension (文件扩展名)

尽管 PKIX 结构的文本编码可以出现在任何地方, 但已知许多工具在序列化 PKIX 结构时提供输出这种编码的选项。为了促进互操作性并将 DER 编码与文本编码分开, 证书的文本编码应该使用扩展名 ".crt"。实现应该意识到, 尽管有这个建议, 许多工具仍然默认使用扩展名 ".cer" 对这种文本编码的证书进行编码。

本节不会以任何方式干扰官方的 application/pkix-cert 注册 [RFC2585] (其中规定 "每个 '.cer' 文件恰好包含一个证书, 以 DER 格式编码"), 而只是阐述了一种广泛存在的事实替代方案。