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

时间:2019-07-09 15:27:07

标签: security ssl

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

到目前为止,我了解以下内容(过于简化):

常规SSL:

  • 服务器具有密钥对并发送公共部分(证书),因此客户端可以使用该公共密钥对消息进行加密,以便它们可以共享对称密钥并最终保护所有通信。
  • 默认情况下,要验证服务器确实是服务器,必须信任客户端的证书颁发者(在信任库中)。

相互SSL:

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

我不明白为什么我必须在客户端使用的密钥存储中包括整个密钥对(也包括私有部分)。在此过程中,客户的私钥在哪里使用?

1 个答案:

答案 0 :(得分:4)

  

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

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

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

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

对于相互认证中使用的客户端证书,此过程完全相同,仅在角色切换时。这就是为什么客户端需要私钥的原因。

相关问题