证书和私钥有什么区别?

信息安全 证书
2021-08-22 20:20:46

证书和私钥有什么区别?

在回答这个网站上的另一个问题时,我想指出这个问题的规范答案,但令我惊讶的是,我没有看到一个。

用户混淆这些术语是可以原谅的,因为许多应用程序使用术语“证书”,而实际上它们的意思是“证书 + 私钥”。最好弄清楚以下文件类型之间的区别:.crt.pem.p12.pfx以及为什么,例如,当你给它一个.crt文件时,一个期望“客户端证书”的应用程序会爆炸。


以下是一些参考资料,答案可以从中提取信息:

2个回答

每个Private Key都有一个对应的Public Key公钥是从私钥数学推导出来的。这两个密钥合称为“密钥对”,可用于两个目的:加密签名就证书而言,签名更为相关。

证书基本上只是一个公钥,已由其他人的私钥签名。这构成了公钥基础设施(PKI)的基础,该问题中链接的文章对此进行了解释。

证书和私钥如何关联?

证书只是一个“花哨的”公钥,它与私钥相关。您可以对证书执行与使用公钥相同的操作。

如果 Bob 得到 Alice 的证书,他就可以为 Alice 加密一条消息。同样,如果 Alice 发布了一些数据并用她的私钥对其进行签名,Bob 可以使用 Alice 的证书来查看它是否真的来自 Alice。

所有这些不同的文件类型是什么?

  • .pem: A.pem是一种事实上的文件格式,称为Privacy-Enhanced Mail一个 PEM 文件可以包含许多不同的东西,例如证书、私钥、公钥和许多其他东西。PEM 格式的文件对内容没有任何说明,就像 Base64 编码的文件对内容没有说明一样。
  • .crt, .cer: 这是另一种常用于存储证书的伪格式。这些可以是 PEM 或DER格式。
  • .p12, : 这些是PKCS#12格式.pfx的可互换文件扩展名。从技术上讲,PKCS#12 是 Microsoft 的 PFX 格式的继承者,但它们已变得可以互换。PKCS#12 文件是加密材料的档案。同样,这包含什么样的材料完全取决于用户。

等等,什么!?

是的、、、.crt.pem.pfx可以.p12用来存储证书、公钥和私钥。从纯粹的技术角度来看,您无法仅通过文件扩展名来判断这些文件的语义内容是什么。如果您感到困惑,请不要担心 - 您并不孤单。

但是,有一些共同的约定正在被遵循。.p12.pfx文件通常用于存储证书以及与该证书对应的私钥。

同样,.crt文件通常包含没有任何相关私钥材料的单个证书。

.pem文件是通配符。它们可以包含任何东西,并且经常看到它们用于各种不同的目的。幸运的是,它们都是纯文本,并且以人类可读的方式添加前缀,例如

-----BEGIN CERTIFICATE-----
MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G
A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y
...

.crt如果应用程序需要客户端证书,为什么它不处理文件?

证书只是一个公钥,因此根据定义是公共的。客户端证书没有什么不同——只是一个人、机器或其他“客户端”的公钥,由某个权威机构签名。

需要客户端证书的应用程序通常希望将该证书用于某些事情,例如向服务器验证客户端。为此,需要证书和相应的私钥。

所以一个应用程序真的应该写“证书加私钥”,因为仅凭证书不足以证明一个人的身份。它实际上是做这件事的私钥。


回答 vitm 的问题:正如答案所解释的,私钥始终与公钥相关联,并且证书包含公钥,以及有关持有公钥的个人的其他信息。

如果服务器程序或客户端程序想要使用证书(例如,使用服务器证书的 Web 服务器或使用客户端证书的 Web 浏览器),他们需要证书私钥。

但是,该私钥永远不会发送到任何地方。私钥用于在数学上解密消息,这些消息使用证书中的公钥加密 - 并签署消息,这些消息使用证书中的公钥进行验证。

如果我只有一个证书,没有公钥,那么我将无法充当与证书相关的服务器或客户端,因为我无法签署消息或解密消息。

证书是一个容器,其中包含有关证书持有者/所有者和公钥的信息。私钥是没有任何额外信息的原始密钥材料。例如,您无法从私钥中提取有关密钥所有者的信息,或与此私钥关联的证书。证书通常被称为公共证书,因为它只包含公钥和公共信息。

仅拥有公共证书并不能证明证书所有权。只有拥有与嵌入在公共证书中的公钥相关联的私钥才能证明证书所有权。

关于证书类型:

  • .crt.pem字面意思是一样的。只是使用不同的编码来将相同的信息存储在文件中。.crt通常是 ASN.1 编码证书的纯二进制副本。.pem是转换为 base64 字符串并由 PEM 页眉和页脚包装的证书的相同二进制副本。他们只存储公共证书。里面没有私钥。有关 PEM 的更多详细信息,请参阅RFC 1421您可以在任何文本编辑器中打开 PEM,复制/粘贴编码证书。原始二进制文件很难处理,这.crt通常是。

  • .p12并且.pfx是同一件事。它们代表一个 PKCS#12 容器,适用于存储公共证书和加密私钥。PFX 或 P12 使用二进制文件编码。使用 PFX,您可以存储具有关联私钥和可选证书链的多个证书。因此它是一个容器。

为什么,例如,当你给它一个 .crt 文件时,一个期望“客户端证书”的应用程序会爆炸。

正如我所说,只有公共证书(即.crt)不足以证明证书的所有权。使用客户端身份验证时,客户端必须证明它拥有提供的证书,并且需要私钥来证明此所有权。因此,客户端应用程序必须能够访问与公共证书关联的私钥。根据客户端应用程序、平台和其他变量,可以通过将.key文件放在定义的位置、访问 PFX/P12 或平台提供的其他方式(从 Windows 中的证书存储读取证书和密钥)来完成。