为什么双向 SSL 在客户端需要密钥对,而不仅仅是公共证书?

geo*_*ydv 1 security ssl

我正在尽最大努力了解相互SSL。我找不到好的答案的一个问题是,为什么您需要在客户端上创建密钥对,而不仅仅是提供公共客户端证书。

到目前为止,我了解以下内容(非常简单化):

常规 SSL:

  • 服务器有一个密钥对并发送公共部分(证书),以便客户端可以使用该公共密钥来加密消息,以便他们可以共享对称密钥并最终保护所有通信。
  • 为了验证服务器实际上是服务器,默认情况下必须信任(在信任库中)客户端的证书颁发者。

相互 SSL:

  • 完全一样,只是这次服务器要求客户端对自己进行身份验证。
  • 客户端发送其公共证书,该证书会根据服务器上的某种“已知证书”列表进行验证。如果匹配,则可以继续通信。

我不明白为什么我必须在客户端使用的密钥库中包含整个密钥对(以及私有部分)。过程中使用的客户端私钥在哪里?

Ste*_*ich 5

服务器有一个密钥对并发送公共部分(证书),以便客户端可以使用该公共密钥来加密消息,以便他们可以共享对称密钥并最终保护所有通信。

这不是服务器证书的重点,使用现代密钥交换方法(即 Diffie Helmann),密钥交换中根本不涉及证书。您所描述的仅适用于过时的 RSA 密钥交换。

证书的要点是用于身份验证。身份验证意味着服务器证明它拥有所提供的证书,然后客户端验证证书是否符合其预期,即由受信任的 CA、预期的主题/SAN 颁发、未过期等。

所有权证明是通过签署一些数据做了(至少是在对端,即客户端提供的部分)与私有密钥相匹配的证书中的公钥。然后,对等方(客户端)可以使用证书的公钥验证此签名,如果验证通过,另一方(服务器)显然拥有秘密私钥,这意味着它拥有证书。

对于用于相互身份验证的客户端证书,过程完全相同,只是角色互换。这就是为什么客户端需要私钥的原因。