我正在研究 SSL 协议(protocol)并试图了解 SSL 握手中涉及的步骤。
现在用于向服务器“客户端证书”验证客户端
身份验证”已完成。我想知道“客户端
中实际发生了什么 证书身份验证”的详细信息。
SSL 握手步骤:
- 客户端向服务器发送客户端的 SSL 版本号、密码设置、随机生成的数据以及服务器使用 SSL 与客户端通信所需的其他信息。
- 服务器向客户端发送服务器的 SSL 版本号、密码设置、随机生成的数据以及客户端通过 SSL 与服务器通信所需的其他信息。服务器还发送自己的数字证书,如果客户端请求需要客户端身份验证的服务器资源,则请求客户端的数字证书。
- 客户端使用服务器发送的信息来验证服务器。如果服务器无法通过身份验证,则会警告用户无法建立加密和身份验证连接的问题。如果服务器可以成功通过身份验证,则客户端继续。
- 使用迄今为止在握手中生成的所有数据,客户端为 session 创建预主 key ,使用服务器的公钥(从服务器的数字证书获得)对其进行加密,并将加密的预主 key 发送到服务器。
- 如果服务器已请求客户端身份验证(握手中的一个可选步骤),则客户端还会签署另一段数据,该数据对于此次握手是唯一的,并且为客户端和服务器所知。在这种情况下,客户端将签名数据和客户端自己的数字证书连同加密的预主 key 一起发送到服务器。
- 如果服务器已请求客户端身份验证,则服务器会尝试对客户端进行身份验证。如果客户端无法通过身份验证,则 session 终止。如果客户端可以成功通过身份验证,服务器将使用其私钥解密预主 key ,然后执行客户端也执行的一系列步骤,从相同的预主 key 开始生成主 key 。
- 客户端和服务器都使用主 key 生成 session key , session key 是用于加密和解密 SSL session 期间交换的信息并验证其完整性的对称 key 。
- 客户端通知服务器,来自客户端的 future 消息将使用 session key 加密。然后它会发送一条单独的加密消息,表明握手的客户端部分已完成。
- 服务器向客户端发送一条消息,通知它以后来自服务器的消息将使用 session key 加密。然后它会发送一条单独的加密消息,表明握手的服务器部分已完成。
- SSL 握手现已完成,SSL session 已开始。客户端和服务器使用 session key 加密和解密它们发送给对方的数据并验证其完整性。
来自: http://www.pierobon.org/ssl/ch2/diagram.htm
我是一名优秀的程序员,十分优秀!