2019独角兽企业重金招聘Python工程师标准>>>
本文主要基于TLS1.2 协议进行简单的讲解,有时间再介绍 IESG2018年3月正式批准的TLS 1.3协议 ,以及两者的区别。由于我们主要为后面研究国密算法和通信协议做基础,这里我们着重讲解协议中与加密相关的数据以及其使用。
TLS协议主要由两层构成:TLS Record Protocol和TLS Handshaking Protocols,而TLS Record Protocol是较低层的协议,基于一些可信任的协议,如TCP,为高层协议提供数据封装、压缩、加密等基本功能的支持 。
而TLS Handshaking Protocols协议是本文的重点,首先我们来认识一下TLS Handshaking Protocols协议的主要流程。
下面我们结合抓包图片来讲解一下各个流程的关键参数及其功能:
1.从上图中我们可以看到在ssl通信中,首先客户端发送了Client Hello的消息给服务端,其主要内容包括TLS的版本号和随机码加密套件Cipher suites,在加密套件中提供了客户端支持的加密算法和协议。
2.服务端收到客户端测信息会恢复Server Hello的数据包给客户端,在ServerHello中包括了协议版本号随机码和选择的加密协议,除此之外还发送了服务端的证书信息Certificate和服务端的证书状态Ceritificate Status(服务端部署了OCSP stapling),Server Key Exchange以及ServerHelloDown。见下图:
如果服务端需要验证客户端的信息,可以发生Certificate request给客户端。
3.客户端根据服务端发送的消息会发送一个密钥协商信息Client Key Exchange给服务端,其中就包括用服务端证书加密的一串秘钥信息Pre_master_secret。这一步主要用来协商主秘钥,主秘钥的生成包括了第一步客户端在ClientHello中发送的随机码,第二步服务端在ServerHello中发送的随机码以及第三部客户端产生并用服务端证书加密发送的秘钥Pre_master_secret。
4.服务端解开加密的Pre_master_secret,并经过一系列的运算(PRF),产生和客户端一样的公共主秘钥。这样客户端和服务端就同时拥有多了相同的加密秘钥,可以进行对称的加密通信。然后回复Change Cihper Spec,表明后面的数据为主秘钥加密的数据。
由于时间关系,这里没有进行做详细的名称解析,有问题的可以直接留言或者Email:[email protected]。
参考协议:
TLS1.2: http://www.rfc-editor.org/rfc/rfc5246.txt
TLS1.3:https://datatracker.ietf.org/doc/draft-ietf-tls-tls13/?include_text=1