.pfx 和 .cert 证书之间的区别

信息安全 tls 证书
2021-08-08 23:34:23

.pfx.cert证书文件有什么区别?

我们是分发.pfx还是.cert用于客户端身份验证?

3个回答

有两个对象:private key,这是服务器拥有的,保密的,用于接收新的 SSL 连接;公钥数学中链接到私钥,并提出了“公共”:它被发送到每个客户端作为连接的初始步骤的一部分。

证书名义上是公钥的容器它包括公钥、服务器名称、有关服务器的一些额外信息以及由证书颁发机构(CA) 计算的签名。当服务器将其公钥发送给客户端时,它实际上发送了它的证书以及一些其他证书(包含签署其证书的 CA 的公钥的证书,以及签署 CA 证书的 CA 的证书,等等)。证书本质上是公共对象。

有些人使用“证书”一词来指定证书和私钥;这是一个常见的混淆来源。我个人坚持严格的定义,证书只是公钥的签名容器。

一个.pfx文件是一个PKCS#12 档案:一个可以包含许多带有可选密码保护的对象的包;但是,通常,PKCS#12 存档包含证书(可能带有各种 CA 证书)相应的私钥。

另一方面,.cert(或.cer.crt)文件通常包含单个证书,单独且没有任何包装(没有私钥,没有密码保护,只有证书)。

我知道这是一个有一年历史的线程,但是对于未来的读者,如上所述,不,您不分发 .pfx 文件,因为这是包含私钥的文件。您可以通过此处描述的方法从 .pfx 文件中提取和分发证书(这是公开的):https ://stackoverflow.com/questions/403174/convert-pfx-to-cer

.pfx 和 .cert 证书文件有什么区别?

@Thomas Pornin 给出的答案非常好。

我们是否分发 .pfx 或 .cert 用于客户端身份验证?

这取决于使用的过程。

设置外部客户端以使用证书进行身份验证的典型过程如下:

  1. 客户端生成一个非对称密钥对(公钥和私钥);
  2. 客户端为公钥生成证书签名请求并将其发送到服务器;
  3. 服务器签署公钥并将此签名(“证书”)返回给客户端;
  4. 客户端将私钥与此证书一起存储在其密钥库中。现在,当客户端连接到服务器时,将提供证书并验证客户端。

在上述场景中,“.cert”被发送回客户端。

在内部,许多组织将为其员工执行此过程。在这种情况下,会发生以下情况:IT 人员为员工生成公钥和私钥对以及证书签名请求。然后,他们签署公钥(使用他们的私有证书颁发机构)并将生成的证书连同相应的私钥和所有中间 CA 证书(“证书链”)放在用户的密钥库中。

在这种情况下,“.pfx”(或“.pem”)将是合适的,因为它包含客户端身份验证所需的所有项目:私钥、证书和证书链。

搜索“证书自动注册”,为您的企业用户和设备自动执行此过程。