握手阶段分4次通信:
第一次:ClientHello
客户端向服务端发出加密通信的请求,请求里面包含:
1、加密协议的版本。
2、client生成的随机数
3、支持的加密算法比如:RSA公钥加密
4、client支持的压缩算法
第二次:ServerHello
服务端向客户端响应,并返回以下信息:
1、服务端确认的加密版本,如果服务端支持的TSL加密版本和客户端不一致, 那么转回到不加密的通信。
2、server生成的随机数。
3、server发给客户端的证书(证书里面包含公钥和数字签名、加密算法、签名机构、过期时间)、网址
第三次:
1、客户端验证服务端的证书有没有过期,网址信息是不是客户端要请求的。浏览器从服务器拿到证书。证书上有服务器的公钥和CA机构打上的数字签名。拿到证书后“验证”其数字签名。具体就是,根据证书上写的CA签发机构,在浏览器内置的“根证书”里找到这个机构对应的“公钥”,用此“公钥”解开数字签名,得到摘要(digest,证书内容的hash值),据此验证证书的合法性。如果验证没有通过,那么会有显示的警告。
2、如果用户确认了或者这些都校验通过了。那么客户端再生成一个随机数叫做“pre market key”,该随机数用公钥加密返回给服务端。
3、编码改变通知。
第四次:
1、这样服务端就有了3个随机数,服务端用这个3个随机数生成会话密钥。
2、然后用这个密钥给内容加密。同时用私钥给会话密钥加密,返回给客户端。
3、发送编码改变通知,通知客户端以后就用会话密钥加密内容。