TSL/SSL握手过程总结

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处 https://blog.csdn.net/qq_21231413/article/details/89181816

一.TSL/SSL握手的目的

  • 身份验证:可以通过证书进行对身份进行验证
  • 算法协商:通讯双方可以通过算法的协商出双方都支持的算法
  • 秘钥协商:主要的密钥协商算法有两种RSA,、DH,我们使用的非对称加密的方式,目的是协商一个对称加密的秘钥,用于数据传输过程中

二.TSL/SSL的Record报头


1、类型Type:占一个字节,主要有一下类型Handshake(0x16)、Change Cipher Spec(0x14)、Alert(0x15)、Application Data (0x17)、Hello Request(0x00)、Client Hello(0x01)、Server Hello(0x02)、Certificate(0x0B)、Server Key Exchange(0x0C)、Certificate Request(0x0D)、Server Hello Done(0x0E)、Certificate Verify (0x0F)、Client Key Exchange(0x10)、Finished(0x14)

2、版本Version:占两个字节,有三个版本SSLv3(0x0300)、TLS1.0(0x0301)、TLS1.1(0x0302)、TLS1.2(0x0303)

PS:

  • TLS/SSL握手过程是建立在TCP之上,先进行TCP握手,再进行SSL/TLS握手
  • TLS/SSL握手过程中的传输的数据包是没有加密的

三.TSL/SSL的Data Record

在传输应用数据使用的是对称加密算法,应用数据会被切成多个分片,分别进行加密,在每份发送的数据,添加MAC,通过对整个数据进行hash算法,最后附加SSL Record报头

四.TSL/SSL握手流程


(1) Client Hello:数据包中包括客户端产生的随机数和Cipher suite(指明客户端支持的加解密算法)
(2) Server Hello:数据包中包括服务器产生的随机数和服务器选中的Cipher suite(加解密算法)
(3) Server Certificate:服务器发送自己的证书,客户端基于CA根证书来验证服务器的证书的有效性
(4) Server key exchange:不是必须的,只有某些秘钥交换算法才需要
(5) Client Certificate Request:可选部分
(6) Server Hello Done: 服务器的Server Hello发送结束
(7) Client Key Exchange:如果是使用RSA方式的Client Key Exchange,则用服务器公钥加密pre_masterkey,然后发送给服务器,服务器收到后,用服务器私钥解出pre_master_secret,在加上客户端随机数,服务器随机数来生成对称加密秘钥,如下Rand1 + Rand2 + pre_master_secret ->master key -> session key,握手结束后传输的数据都是用对称加密密钥session key进行加解密
(8) Client Change Cepher Spec:告诉服务器,之后传输的数据开始使用对称加密传输
(9) Server Change Cepher Spec:告诉客户端,之后传输的数据开始使用对称加密传输
(10) 双方的Finish Message:第一个使用对称加密传输的数据包,数据固定,用来验证双方是否协商一致

PS:在Client Certifacte中包含了客户端的公钥,Client Verify一串数据+非对称加解密的方式用于服务器验证客户端的有效性

猜你喜欢

转载自blog.csdn.net/qq_21231413/article/details/89181816