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