我相信PEM编码是唯一的。
但我看到同一个证书可以有两个不同的pem版本。或者至少,我有两个包含相同信息(序列号、CA颁发者等(的PEM证书,所以它们应该是相同的。
同一个证书可以有两个不同的PEM编码吗?
对于同一组证书数据,没有两个不同的编码版本。
PEM中的演示可能略有不同。我的意思是,PEM可能包括或缺少PEM页眉和页脚,Base64编码的有效载荷在64个字符后可能有也可能没有换行符,但它不会影响Base64编码值,因为换行符不是编码的一部分,并且被Base64编码器/解码器忽略。单个证书的原始值保持不变。
更新:
确切的PEM格式在RFC 1421中有定义,但并不总是遵循它,我看到了不同的表示,也可以称为PEM(尽管它们并不严格遵循RFC(。例如,我看到了这样的:
-----BEGIN XYX-----
<Base64 string split in 64 chars per line>
<Base64 string split in 64 chars per line>
<Base64 string split in 64 chars per line>
-----END XYZ-----
或
-----BEGIN XYX-----
<Long Base64 string split in single line (without line breaks>
-----END XYZ-----
甚至这个:
-----BEGIN XYX-----<Long Base64 string split in single line (without line breaks>-----END XYZ-----
或者这些格式的变体。只有第一个例子是合法的PEM格式,而其余的都不兼容,但可以称为PEM,因为它们有PEM页眉和页脚,以及Base64编码的有效载荷。
除了Crypt32:描述的非标准但经常被接受的(错误(编码之外
如RFC7468中所述,X.509证书使用了几种不同的"类型",包括普通CERTIFICATE
、X509 CERTIFICATE
或X.509 CERTIFICATE
。这些包含相同的数据,这是否真的是不同的编码还有争议。
OpenSSL和一些与之兼容的东西有一个相关但不同的PEM类型TRUSTED CERTIFICATE
,其中数据实际上包括X.509证书(在DER中(和一个添加的DER blob,其中包含OpenSSL专有的信任信息。这是不同的,但只是一点点。
一个或多个证书可以打包在PKCS7或CMS的"容器"中,如果它在文件或URL中,通常使用p7b或p7c扩展名。包含证书的PKCS7/CMS与证书本身是不同的,尽管它有时可以互换使用(Microsoft CertMgr,我看着你(,并且包含证书的PKCS7/CMS的PEM编码与证书本身不同。