①客户端发送Client Hello
SSL/TSL version:1.2(协议版本)
Cipher Suites:(支持的加解密算法族)
Random:(客户端生成随机数random_client)
Session ID:(如果之前已经建立过https链接并且服务器返回又SID,则发送时会有值)
Extensions:(扩展数据 例如:Server Name : www.google.com etc)
②服务端相应Server Hello
Random:(服务端生产的随机数random_server)
Session ID:(服务端对SID又三种情况)
(1)恢复session ID:我们之前在client hello里面已经提到,如果client hello里面的session ID在服务端有缓存,服务端会尝试恢复这个session;
(2)新session ID:这里又分两种情况,第一种是client hello里面的session ID是空值,此时服务端会给客户端一个新的session ID,第二种是client hello里面的session ID此服务器并没有找到对应的缓存,此时也会回一个新的session ID给客户端
(3)NULL:服务端不希望此session被恢复,因此session ID为空。
Cipher Suite:(在client hello里面,客户端给出了多种加密族 Cipher,而在客户端所提供的加密族中,服务端挑选了“TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”)
(a)TLS为协议,RSA为密钥交换的算法;
(b)AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式);
(c)SHA是哈希的算法。这就意味着服务端会使用ECDHE-RSA算法进行密钥交换,通过AES_128_GCM对称加密算法来加密数据,利用SHA256哈希算法来确保数据完整性。
Server Certificate:(服务端证书)
Server Key Exchange:(Server返回给Client用于生成key(对称加密密匙)的信息)
Certificate Request:(要求Client发送证书)
ServerHelloDone:(表示Server已经结束Hello过程)
③客户端验证证书真伪性如需则发送客户端证书
Client Certificate:(客户端证书)
Client Key Exchange:(client提交给Server自己用于生成key(对称加密密匙)的信息)
④对称加密密钥交换
(1)首先,客户端利用CA数字证书实现身份认证,利用非对称加密协商对称密钥。
(2)客户端会向服务器传输一个“pubkey_client”随机数,服务器收到之后,利用特定算法生成另外一个“pubkey_server”随机数,客户端利用这两个“pubkey”随机数生成一个 pre-master 随机数。
(3)客户端利用自己在 client hello 里面传输的随机数 random_C,以及收到的 server hello 里面的随机数 random_S,外加 pre-master 随机数,利用对称密钥生成算法生成 对称密钥 enc_key:enc_key=Fuc(random_C, random_S, Pre-Master)
⑤客户端通知服务端发送加密数据和结束握手
ChangeCIpherSpec:(客户端通知服务端发送加密数据)
Client Finished:(结束握手)
⑥服务端通知服务端发送加密数据和结束握手
ChangeCIpherSpec:( 客户端通知服务端发送加密数据 )
Client Finished:( 结束握手 )
⑦利用对称密钥加解密传输数据