| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> HTTPS抓包连接过程 -> 正文阅读 |
|
[网络协议]HTTPS抓包连接过程 |
TLS握手流程分析 在了解了TLS的协议分层结构之后,回过头来看我们所抓到的数据包,结合实际的数据包来了解一下TLS的握手流程以及握手过程中产生了哪些数据的交互,TLS的握手流程如下图所示: ? ? 4.1 客户端 —— Client Hello 首先是客户端发送了一个Client Hello报文: 从抓到的数据包来看,其握手层协议类型为Handshake,主要数据内容有以下几种: Random: 一个客户端随机数,参与了SSL握手的 master key的计算、KDF计算、server_key_exchange的签名值的计算 我们只需要大概了解这些字段的基本含义即可,涉及到密码学的东西有余力的情况下再去以点破面自行了解。 4.2 服务端 —— Server Hello 在客户端在收到客户端发来的Client Hello包之后,会返回一个Server Hello包给客户端 Server Hello包中包含服务端生成的Random随机数、TLS协议版本、Sesssion ID 和 数据压缩方法,最主要的是返回了服务端根据Client Hello中的参数最终选择的加密套件Cipher Suite。 4.3 服务端 —— Certificate、Server Key Exchange、Server Hello Done 服务端在返回了Server Hello数据包之后,紧接着向客户端返回自己的证书和一个 Server Key Exchange报文,用于秘钥协商,最后再发送一个Server Hello Done告诉客户端SSL第一次握手结束了。 服务端返回的证书应该说是一个证书链,如上图所示,可以看到服务端其实返回了两个证书。一般来说,服务端证书链通常配置成三级,【站点证书】——【中间证书】——【根证书】,根证书通常是内置在操作系统或者支持HTTPS的应用当中的,所以为了减少开销一般不会将根证书也返回。 【扩展】:TLS分为单向认证和双向认证两种,顾名思义单向认证就是只需要客户端去验证服务端的身份,而双向认证需要服务端也要验证客户端的请求,但是十分消耗资源,导致性能低下,所以一般都不会开启双向认证。如果开启了双向认证,服务端还需要在Server Hello Done之前发送一个CertificateRequest数据包,然后客户端在收到Server Hello Done数据包之后需要向服务端发送一个Certificate数据包。 4.4 客户端 —— Client Key Exchange、ChangeCipher Spec、Encrypted Handshake Message 客户端在收到服务端发送来的Sever Hello Done包之后,开始验证证书的有效性,如果证书有效之后,才会继续进行这一步。验证证书有效性主要包括:证书链是否可信、证书是否吊销、证书有效期、域名检验。 证书验证通过后,客户端向服务端发送的主要有这几个参数: client_key_exchange: 客户端计算产生随机数字pre-master,并且用服务端公钥加密,发送给服务端,客户端以后具有自己的随机数A和服务端的随机数B,结合pre-master计算出协商得到的对称秘钥 4.5 服务端 —— New Session Ticket,Change Cipher Spec、Encrypted Handshake Message 服务端在收到客户端的加密的pre - master后,通过自己的私钥解密,然后根据签名协商得到的随机数A和B生成协商秘钥,然后使用协商秘钥解密被加密的摘要,再将前面接收到的所有客户端发送过来的相关安全参数进行hash之后,比较两边的摘要是否相同,从而验证握手是否合法。验证通过之后向客户端发送以下几个数据包: Change Cipher Spec: 服务端通知客户端后续的通信都采用协商秘钥进行加密 4.6 安全连接建立,发送加密数据 —— Application Data 当客户端收到服务端传递过来的Encryted Handshake Message,使用协商秘钥解密并且验证有效后,则说明连接成功建立,之后的所有数据将使用协商秘钥进行加密: 如下图所示,加密后的数据通过TLS握手层的应用数据协议进行封装,发送给对: 至此TLS/SSL安全连接就已经建立。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:43:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |