PEM 证书包是否有官方标准和/或名称?

信息安全 证书 openssl 术语 pkcs12 佩姆
2021-08-13 04:38:24

这是一个与安全性无关的问题。这是关于安全/加密命名法。这让我有点烦,所以这里是:

我知道将相关证书/密钥捆绑在一起的两种方法:

  • 重量级方法:PFX。有 PKCS #12 文件格式。Windows 将这些保存为.PFX.P12文件。
  • 轻量级方法:Just-cat-everything(又名“PEM 捆绑包”)。只需cat在所有证书/密钥上运行(按您想要的顺序)并将其重定向到一个新的文本文件中。

问题

  • “PEM 捆绑”方法是否有实际标准?它甚至被称为还是有更正式的名称?(请引用!)

我的印象是,这只是 OpenSSL 用于处理证书/密钥包的临时方式,它已被采纳为事实上的标准。这是真的?还是 PEM 标准的“只管一切”方法的一部分?

命名调查

人们如何称呼这些 PEM 捆绑文件?

1个回答

“PEM”格式的东西没有真正的标准。有一个名为“隐私增强型电子邮件”的提议标准,“PEM”的首字母缩写词就是从该标准中派生出来的;然而,该标准从未在其竞争对手(PGP 和 S/MIME)中获得吸引力,也没有人实施它。

OpenSSL采用了 PEM 并通过额外的功能和标头“增强”了 PEM 格式,而没有任何实际的规范或文档值得这个名字,所以现在,“PEM”真正意味着“OpenSSL 产生和可以解析的任何东西”。其他供应商紧随其后,例如 Microsoft,其软件可以解码 PEM 编码的证书。

PEM(Base64-encoded data, with a '-----BEGIN XXX-----' header and对应的'-----END XXX-----' trail)的原理已被用于其他事物; PGP 称之为“ASCII 盔甲”。这种做事方式的重点是能够在一系列文本数据中定位感兴趣的数据,而不管在传输时对该文本施加的各种折磨(例如,作为电子邮件发送、复制和粘贴、包含在Word 文档,打印和扫描...)。这一点很重要:这意味着 PEM 的全部意义在于能够将证书随意存储在一起,而无需遵循特定的精确标准。从这个意义上说,“PEM 捆绑包”的标准是自相矛盾的:“PEM 捆绑包”

称其为“事实上的标准”并没有错。


当你想编码和发送证书时,实际上有两种以上的方法;可能性包括:

  • 使用 ASN.1 DER 编码(这标准的)分别对每个证书进行编码。
  • 使用 PEM 进一步使这些证书对基于 ASCII 的传输更具弹性;这也允许将其中的几个存储在一个文件中(您称之为“PEM 包”);
  • 将证书存储在 PKCS#7(又名CMSSignedData对象中。ASignedData名义上是一种用于嵌入已签名数据的格式;但是您可以省略数据并完全包含零签名,在这种情况下,您有某种外壳,其中包含一个用于嵌入“额外证书”的字段(名义上,这些证书有助于验证签名)。这是对现有标准的重用,该标准并不打算这样做,但现有软件可以做到这一点。Microsoft 将其称为“PKCS#7 证书”或“P7B 文件”。
  • 使用 PKCS#7SignedData但也对其进行 PEM 编码(因此您可以在概念上将其中的几个存储在一个文件中)。
  • PKCS#12(也称为“PFX”)。这种格式还允许存储其他类型的对象,并且包括基于密码的加密规定,因此它通常用于存储证书及其私钥。(显然,没有人想过 PEM 编码 PKCS#12 档案。)

私钥也有自己的格式。例如,PKCS#1为 RSA 私钥定义了一个基于 ASN.1 的编码,OpenSSL 将愉快地使用它,然后使用“BEGIN RSA PRIVATE KEY”标头进行 PEM 编码。该格式可以进一步包装到PKCS#8对象中,其中包括算法的基于 ASN.1 的标识符,以及对基于密码的加密的可选支持;然后 OpenSSL也会对 PKCS#8 文件进行编码,这次使用“BEGIN PRIVATE KEY”或“BEGIN ENCRYPTED PRIVATE KEY”(PEM 标头中没有算法指示),具体取决于是否使用了基于密码的加密。或者,原始 PKCS#1 格式也可以使用 OpenSSL 实现但未记录的 PEM 扩展进行密码加密(OpenSSL 的源代码应该是规范)。

总结:一团糟。