每个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 浏览器),他们需要证书和私钥。
但是,该私钥永远不会发送到任何地方。私钥用于在数学上解密消息,这些消息使用证书中的公钥加密 - 并签署消息,这些消息使用证书中的公钥进行验证。
如果我只有一个证书,没有公钥,那么我将无法充当与证书相关的服务器或客户端,因为我无法签署消息或解密消息。