HTTPS协议自我总结之一 SSL/TSL握手过程分析

最近几天突然对HTTPS的内部工作流程有点好奇,所以跟同事一起查阅资料探讨了一下,写下这几篇总结加深下印象。

 

这一篇先讲讲SSL层的握手过程,我们来根据图片一步步讲解,图片如下:

HTTPS协议自我总结之一 SSL/TSL握手过程分析_第1张图片

整个握手分为四个阶段:

1. 客户端像服务端发起请求,请求的信息都是明文,信息包括以下几个部分:

a. content type 消息的内容类型,告诉服务器,我要握手了 handshake

b. TSL version 协议版本

c. session id/session ticket,用于会话缓存,减少握手耗时,第一次传空代表是新会

话,不需要去查找恢复之前存在的会话。

d. cipher suites 客户端支持的加密套件列表

e. compression methods(压缩算法列表,用于后续的信息压缩传输)

f. Random 产生一个随机数 Random_C

g. Extensions 附加的其他信息 如SNI

2. 服务端收到客户端的信息后,会以明文形式返回如下信息:

a. content type 消息的内容类型,握手 handshake

b. TSL version 协议版本

c. session id/session ticket,用于会话缓存,服务端生成session id/Session ticket

报文(包括主密钥在内的会话信息,masterkey)代表该次会话返回给客户端

d. cipher suites 选中加密套件列表中要用的加密算法

e. compression methods(压缩算法列表,用于后续的信息压缩传输) 选中压缩算法

f. Random产生一个随机数 Random_S

g.Certificate 服务端的CA证书

h.Extension 附加信息

3. 客户端收到服务端返回的信息后首先对证书进行校验(这一步见第二篇文章)

4. 客户端校验证书通过后做如下操作

a. 校验通过后, 客户端可以拿到证书中的服务端的公钥,然后产生一个随机数假设

为Random_C1,通过公钥对这个随机数进行加密。生成一个pramaster-key. 将这个

premaster-key传给服务器,同时,客户端通过

Random_C,Random_S,Random_C1,经过特定算法在客户端生成一个密钥。

b change cipher spec, 发送告诉服务端正式变更双方传输数据时候的加密算法和密钥

c encrypted handshake message,是指校验数据的完整性,是否有被串改

或者遗失,校验的方式是:将所有传到服务端的参数通过散列的hash算法

生成一段字串, 然后用上述跟服务端商量好的加密算法和密钥对这段字串

进行加密,传输给服务端。

d. session id/ session ticket session id是保存在服务器的session域的,每次带上

可以直接找到会话,而session ticket呢则是将接收到的masterkey 和

session ticket组成键值对保存在客户端,方便下次会话的时候如果存在

session ticket则直接带上去请求服务器,可以恢复会话。

5. 服务端收到客户端发送过来的消息后,进行如下操作:

a. 通过公钥加密传输过来的premaster-key,服务端使用私钥进行解密。得到第三个随

机数 Random_C1, 然后服务端也同时根据Random_C, Random_S,

Random_C1,经过跟客户端 一样的特定算法在服务端生成一个和客户端相同的

密钥。(注意, 这个密钥是在各自的端通过某种特定算法生成的, 而没有通过

网络传输,所以可以防止被盗取)

b. 服务端把所有接收到的客户端的参数通过散列的hash算法生成一段字串, 然后

通过约定的加密算法和生成的密钥解密客户端传过来的加密的字串, 拿两个字串

对比 ,如果不相等则说明中间被人篡改,则该次握手失败。如果相同则继续往下。

c. change cipher spec, 发送告诉客户端正式变更双方传输数据时候的加密算法和密钥

d. encrypted handshake message,是指校验数据的完整性,是否有被串改

或者遗失,校验的方式是:将所有传到客户端的参数通过散列的hash算法

生成一段字串, 然后用上述跟客户按端商量好的加密算法和密钥对这段字串

进行加密,传输给客户端端。

6. 客户端对服务端发回来的校验的数据进行验证:

客户端把所有接收到的服务端的参数通过散列的hash算法生成一段字串, 然后

通过约定的加密算法和生成的密钥解密客户端传过来的加密的字串, 拿两个字串

对比 。对比成功则握手成功。

7. 开始使用约定好的加密算法和密钥传输数据。数据传输的加密算法一般是对称加密,

传输速度块。

 

以上就是SSL/TSL握手的全部过程。

你可能感兴趣的:(计算机网络)