3. 接下来服务端为了证明自己的身份,会把数字证书颁发给客户端(第186号数据包),在Certificates区段中,保存有证书的详细信息,其中包含了服务端非对称加密RSA的公钥。客户端收到这个数字证书数据包后向服务器返回一个ACK确认包(第195号数据包)。
那么客户端拿到了服务端的数字证书后,怎样检验该数字证书是真实有效的呢?这个过程就类似前面鲍勃与苏珊的通信。首先客户端收到证书后使用CA的公钥解密得到 hash1,然后客户端会使用同样的Hash算法得到hash2,对 hash1 和 hash2 进行对比,如果值相同,则为可信赖的证书,否则则认为证书不可信。
4. 客户端验证完证书后,然后再会生成一个随机数Random3,用服务端的RSA公钥对Random3随机数进行加密,生成PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端(第198号数据包)。服务端再用自己RSA私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 Random2 Random3,两边再根据同样的算法就可以生成一份密钥,SSL握手结束后的应用层数据都是使用这个密钥进行对称加密。
5.Change Cipher Spec是服务端告诉客户端,之后的通信都会使用前面协商出来的密钥加密了。(第203号数据包)。
经过以上几个阶段后,整个SSL握手过程也就结束了。接下来客户端与服务器进入加密通信的阶段,就完全是使用普通的HTTP协议,但是会使用会话密钥来加密内容。
客户端发送给服务端经过加密的数据: