php ssl tls_SSL/TLS 协议简介与解析

本文主要基于TLS1.2 协议进行简单的讲解,有时间再介绍 IESG2018年3月正式批准的TLS 1.3协议 ,以及两者的区别。由于我们主要为后面研究国密算法和通信协议做基础,这里我们着重讲解协议中与加密相关的数据以及其使用。

TLS协议主要由两层构成:TLS Record Protocol和TLS Handshaking Protocols,而TLS Record Protocol是较低层的协议,基于一些可信任的协议,如TCP,为高层协议提供数据封装、压缩、加密等基本功能的支持 。

而TLS Handshaking Protocols协议是本文的重点,首先我们来认识一下TLS Handshaking Protocols协议的主要流程。

7c2f0a19260386330f58478d3c6e7303.png

下面我们结合抓包图片来讲解一下各个流程的关键参数及其功能:

98264369f69dad6c76a35974be1123b5.png

1.从上图中我们可以看到在ssl通信中,首先客户端发送了Client Hello的消息给服务端,其主要内容包括TLS的版本号和随机码加密套件Cipher suites,在加密套件中提供了客户端支持的加密算法和协议。

2.服务端收到客户端测信息会恢复Server Hello的数据包给客户端,在ServerHello中包括了协议版本号随机码和选择的加密协议,除此之外还发送了服务端的证书信息Certificate和服务端的证书状态Ceritificate Status(服务端部署了OCSP stapling),Server Key Exchange以及ServerHelloDown。见下图:

a8cdc6a01efbe36a98656d96f570a12b.png

如果服务端需要验证客户端的信息,可以发生Certificate request给客户端。

3.客户端根据服务端发送的消息会发送一个密钥协商信息Client Key Exchange给服务端,其中就包括用服务端证书加密的一串秘钥信息Pre_master_secret。这一步主要用来协商主秘钥,主秘钥的生成包括了第一步客户端在ClientHello中发送的随机码,第二步服务端在ServerHello中发送的随机码以及第三部客户端产生并用服务端证书加密发送的秘钥Pre_master_secret。

cc33df5d8ed966be8ec25518b7f08954.png

4.服务端解开加密的Pre_master_secret,并经过一系列的运算(PRF),产生和客户端一样的公共主秘钥。这样客户端和服务端就同时拥有多了相同的加密秘钥,可以进行对称的加密通信。然后回复Change Cihper Spec,表明后面的数据为主秘钥加密的数据。

48e718233c9d6aaa1e6ee42bf94729ff.png

由于时间关系,这里没有进行做详细的名称解析,有问题的可以直接留言或者Email:elitetao@163.com。

参考协议:

TLS1.2: http://www.rfc-editor.org/rfc/rfc5246.txt

TLS1.3:https://datatracker.ietf.org/doc/draft-ietf-tls-tls13/?include_text=1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值