SSL握手中的客户端证书身份验证

3

我正在学习SSL协议,并尝试理解SSL握手中涉及的步骤。

现在为了将客户端认证给服务器,“客户端证书认证”被执行。我想详细了解“客户端证书认证”的实际过程。


1
你有尝试自己找到答案吗?试着去做,如果你在理解某些具体问题时遇到困难,我们可以帮助你。 - saljuama
阅读RFC 2246或Eric Rescoria的优秀著作。这个问题太广泛了。 - user207421
1个回答

7
SSL握手步骤:
  1. 客户端向服务器发送SSL版本号、密码设置、随机生成的数据和其他服务器需要使用SSL与客户端通信的信息。
  2. 服务器向客户端发送服务器的SSL版本号、密码设置、随机生成的数据和客户端需要使用SSL与服务器通信的其他信息。服务器还发送自己的数字证书,并且如果客户端请求需要客户端身份验证的服务器资源,则请求客户端的数字证书。
  3. 客户端使用服务器发送的信息对服务器进行身份验证。如果无法验证服务器,则会警告用户无法建立加密和经过身份验证的连接。如果可以成功验证服务器,则客户端继续。
  4. 使用到目前为止握手生成的所有数据,客户端创建本次会话的预主密钥,使用服务器的公钥(从服务器的数字证书中获取)对其进行加密,并将加密后的预主密钥发送到服务器。
  5. 如果服务器已请求客户端身份验证(握手中的可选步骤),则客户端还会签署另一段数据,该数据是本次握手唯一且由客户端和服务器共同知道的。在这种情况下,客户端将签名数据和客户端自己的数字证书与加密后的预主密钥一起发送给服务器。
  6. 如果服务器已请求客户端身份验证,则服务器会尝试验证客户端。如果无法验证客户端,则会终止会话。如果可以成功验证客户端,则服务器使用其私钥解密预主密钥,然后执行一系列步骤,客户端也从同一个预主密钥开始执行,以生成主密钥。
  7. 客户端和服务器都使用主密钥生成会话密钥,该会话密钥是用于加密和解密SSL会话期间交换的信息以及验证其完整性的对称密钥。
  8. 客户端通知服务器,未来来自客户端的消息将使用会话密钥进行加密。然后,它发送一个单独的加密消息,指示客户端握手部分已完成。
  9. 服务器向客户端发送消息,告知其未来来自服务器的消息将使用会话密钥进行加密。然后,它发送一个单独的加密消息,指示服务器握手部分已完成。
  10. SSL握手现在已经完成,SSL会话已经开始。客户端和服务器使用会话密钥加密和解密彼此发送的数据,并验证其完整性。
来源: http://www.pierobon.org/ssl/ch2/diagram.htm

1
如果您在#6中详细介绍服务器如何验证客户端证书,而不仅仅是说“服务器尝试验证客户端”,那就太好了。 - RobOhRob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接