同一个 x509 证书可以有两种不同的 PEM 编码吗?

Can the same x509 certificate have two different PEM encoding?

我相信 PEM 编码是独一无二的。

但是我看到同一个证书可以有两个不同的pem版本。或者至少,我有两个包含相同信息(序列号、CA 颁发者等...)的 PEM 证书,因此它们应该相同。

同一个证书可以有两种不同的PEM编码吗?

同一组证书数据没有两个不同的编码版本。

PEM 中的呈现方式可能略有不同。我的意思是,PEM 可能包含或缺少 PEM 页眉和页脚,Base64 编码的有效负载在 64 个字符后可能有也可能没有换行符,但它不会影响 Base64 编码的值,因为换行符不是编码的一部分并被忽略通过 Base64 encoder/decoder。单个证书的原始值不变。

更新:

确切的 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,因为它们具有 PE​​M 页眉和页脚以及 Base64 编码的有效负载。

除了 描述的非标准但经常被接受的(错误的)编码:

RFC7468 所述,几种不同的 'types' 已用于 X.509 证书,包括普通 CERTIFICATEX509 CERTIFICATEX.509 CERTIFICATE。它们包含相同的数据,这是否真的是不同的编码是值得商榷的。

OpenSSL 和一些与之兼容的东西有一个相关但不同的 PEM 类型 TRUSTED CERTIFICATE 其中数据实际上由 X.509 证书(在 DER 中)加上一个添加的包含信任信息专有的 DER blob 组成到 OpenSSL。这是不同的,但只有一点点。

一个或多个证书可以打包在 PKCS7 或 CMS 'container' 中,如果它在文件中或 URL,通常使用 p7b 或 p7c 扩展名。 PKCS7/CMS containing 证书与证书本身是不同的东西,尽管它有时可以互换使用(Microsoft CertMgr,我在看你)和 PEM PKCS7/CMS 包含证书的编码与证书本身的编码不同。