网络协议安全:SSL/TLS协议详解,SSL协议执行原理、报文格式解析,Wireshark抓包分析SSL协议

「作者简介」:2022年北京冬奥会中国代表队,CSDN Top100,学习更多干货,请关注专栏《网络安全自学教程》

SSL协议

  • 1、SSL协议发展史
  • 2、SSL协议执行过程
  • 3、SSL报文格式字段解析
    • 3.1、TLS报文头
    • 3.2、Handshake报文
  • 4、Wireshark抓包分析SSL协议执行原理
    • 4.1、Client Hello
    • 4.2、Server Hello

SSL(Secure Socket Layer)是「安全套接层协议」,在握手过程中使用非对称秘钥加密实现数据的机密性;使用哈希算法实现数据的完整性。

1、SSL协议发展史

SSL3.1开始名字改成了TLS,TLS在SSL的基础上进行了「标准化」,实际上两个协议的功能没有明显的差距。

SSL1.0SSL2.0SSL3.0SSL3.1SSL3.2SSL3.3SSL3.4
TLS1.0TLS1.1TLS1.2TLS1.3
内部弃用弃用可用可用主流可用
  1. SSL1.0:网景(Netscape)公司开发的第一个版本,由于存在严重bug,仅在内部使用。
  2. SSL2.0:1995年2月发布,存在安全漏洞,于2011年弃用。
  3. SSL3.0:1996年发布,容易被POODLE攻击,与2015年弃用。
  4. TLS1.0:1999年发布,IETF组织在SSL基础上进行了标准化,功能变化不大。
  5. TLS1.1:2006年4月发布,修复了安全漏洞,增加加密强度。
  6. TLS1.2:2008年8月发布,强化了支持的算法包,增加了扩展协议,是目前使用的主流版本。
  7. TLS1.3:2018年8月发布,在强化安全性的同时,引入了0-RTT模式,降低了传输延迟,增强了传输性能

2、SSL协议执行过程

SSL协议分为两层:

  • 第一层是「SSL记录协议」(SSL Record Protocol),工作在传输层协议之上,为高层协议封装、压缩、「加密数据」
  • 第二层是「SSL握手协议」(SSL Handshake Protocol),工作在记录协议之上,在数据传输前通过握手的方式验证身份、「协商加密算法」

补充:第二层一共有4种子协议,多个子协议信息可以包含在一个记录协议的数据包里,但必须标识出来。除了握手协议还有三个需要了解的协议:密码参数协议、警报协议、应用数据协议。

  • 密码参数协议(ChangeCipherSpec Protocol):这个协议很简单,简单到只有一条消息,就是发出激活加密的信号,让之前协商的参数生效,从而让通信变得加密。
  • 警报协议(Alert Protocol):提示异常或可能危及安全性的潜在为题。
  • 应用数据协议(Application Data Protocol):获取应用层的数据并加密传输。

在这里插入图片描述

SSL协议执行的时候分为两个阶段:

  1. 第一个是「握手阶段」,通信双方使用SSL握手协议协商加密算法和密钥。
  2. 第二个是「数据传输阶段」,使用握手阶段协商的算法加密并传输数据。

在这里插入图片描述

SSL协议的握手过程如下图

在这里插入图片描述

接下来我们详细讲解每个握手阶段作用:

  1. Client Hello :客户端把支持的加密算法列表发给服务器。
  2. Server Hello :服务器从列表里选择一个加密算法,然后告诉客户端。
  3. Certificate :服务器把自己的证书发给客户端。
  4. Server Key Exchange :服务器跟客户端约定对称密钥算法的密钥。如果使用Diffie-Hellman方式约定密钥,则必选;如果使用RSA方式约定密钥,则省略。
  5. Server Hello Done :告诉客户端 “我发完了”。
  6. Client Key Exchange:客户端跟服务器约定对称密钥算法的密钥。如果使用Diffie-Hellman方式约定密钥,则发送必要的信息给服务器,让服务器和客户端生成同一个密钥;如果使用RS方式约定密钥,则生成一个对称密钥算法的密钥,用服务器的公钥加密后,发送给服务器。
  7. ChangeCipherSpec:客户端告诉服务器 “你可以使用加密模式了”。
  8. Encrypted Handshake Message:也叫Finished,客户端告诉服务器 “我准备好加密通信了”。
  9. ChangeCipherSpec:服务器告诉客户端 “你可以使用加密模式了”。
  10. Encrypted Handshake Message:也叫Finished,服务器告诉客户端 “我准备好加密通信了”。

上面的过程是单向认证模式,比较常见;如果使用双向认证模式,握手还会增加以下过程:

在这里插入图片描述

  • Certificate Request (可选):开启双向认证模式,即客户端验证服务器,服务器也要验证客户端。https的网站很少用,一般抓不到这个包。
  • Certificate(可选):发送客户端的证书给服务器。只有收到 Certificate Request 才发,否则不发这个报文。
  • Certificate Verify (可选):把客户端的签名发给服务器,服务器用客户端的公钥验证签名,从而验证客户端的身份。只有收到 Certificate Request 才发,否则不发这个报文。

3、SSL报文格式字段解析

3.1、TLS报文头

每个TLS的数据包都有5个字节的报文头(下图圈中的地方):

  • Content Type:1个字节,记录的子协议的协议类型。
  • Version:2个字节,TLS的版本。
  • Length:2个字节,报文数据的长度(不含报文头),最大16384(16K)。

在这里插入图片描述

3.2、Handshake报文

Handshake 握手协议是TLS中最复杂的协议,有10种握手消息类型。

1)HelloRequest:(不常见)连接使用太长时间后,服务器强制客户端重新协商握手。

  • Content Type:握手类型。
  • Length:(3个字节)数据长度。

2)Client Hello:开始握手协商,携带客户端支持的加密算法列表、压缩算法列表、扩展列表,供服务器选择。

在这里插入图片描述

  1. Content Type:握手类型。
  2. Lengt:(3个字节)数据长度。
  3. Version:(4个字节)协议版本。
  4. Random:(32位)客户端生成一个随机数,用于后续的对称加密。
  5. Session ID Lenth:(1个字节)会话ID长度。
  6. Session ID:(32位)会话ID。
  7. Cipher Suites:客户端支持的加密算法列表,供服务器选择。
  8. Compression Methed:客户端支持的压缩算法,供服务器选择。
  9. Extensions:扩展。

3)Server Hello:开始握手协商,返回服务器选择的加密算法、压缩算法。

在这里插入图片描述

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • Version:(4个字节)协议版本。
  • Random:(32位)服务器生成一个随机数,用于后续的对称加密。
  • Session ID Lenth:(1个字节)会话ID长度。
  • Session ID:(32位)会话ID。
  • Cipher Suites:服务器选择的加密算法。
  • Compression Methed:服务器选择的压缩算法。
  • Extensions:扩展。

4)Certificate:发送公钥证书列表。

在这里插入图片描述

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • Certificates Length:证书列表长度。
  • Certificates:证书列表。

5)ServerKeyExchange:发送服务器的密钥交换算法参数,用于后续的对称加密。

在这里插入图片描述

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • algorithm params:算法参数。

6)CertificateRequest:服务器验证客户端身份,不常见。

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • Certificate Type Length:证书类型长度。
  • Certificate Type:证书类型。
  • Certificate Authorities length:认证中心长度。
  • Certificate Authorities:认证中心。

7)ServerHelloDone:服务器完成握手协商时发送。只提示,不携带其他信息。

在这里插入图片描述

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。

8)ClientKeyExchange:为服务器提供密钥交换算法参数,用于生成对称加密的密钥。

在这里插入图片描述

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • algorithm params:算法参数。

9)CertificateVerify:客户端使用此消息来证明服务器拥有与其公钥证书相对应的私钥。该消息保存由客户端进行数字签名的哈希信息。

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • signed hash:客户端数字签名的哈希信息。

10)Finished:也叫Encrypted Handshake Message,标识握手协商已完成、CipherSuite加密已激活。从这个报文开始加密发送,报文携带先前所有握手信息的哈希值,用来验证数据的完整性,防止数据被篡改。

在这里插入图片描述

  • Content Type:握手类型。
  • Lengt:(3个字节)数据长度。
  • signed hash:先前所有握手信息的哈希值。

4、Wireshark抓包分析SSL协议执行原理

1)cmd 中 ping weibo.com 获取微博IP;

ping返回的地址有时会变,用 nslookup weibo.com 解析微博的IP;

解析列表中的4个IP,我们都抓,以防IP变动导致没抓到包。

在这里插入图片描述

2)打开wireshark,过滤微博的IP _ws.col.protocol == "TLSv1.2" and (ip.addr==123.125.107.13 or ip.addr==123.125.107.14 or ip.addr==202.108.0.99 or ip.addr==202.108.0.98) 后,开启抓包,访问微博。

在这里插入图片描述

3)从抓包结果可以看出来,前几个包是握手,握手完成以后才开始传数据。

在这里插入图片描述

4)握手有10个过程,一个数据包可以包含多个握手过程,比如第三个包,就同时包含了Certificate、Server Key Exchange、Server Hello Done三个过程。

在这里插入图片描述

4.1、Client Hello

第一个包是我给微博发的 Client Hello,意思是我要开始握手协商了。

在这里插入图片描述

Handshake Type 是握手类型,这里的类型是Client Hello。
Length 和 Version是数据包长度和协议版本。

Random 是客户端生成的随机数,用来生成对称密钥。
Session ID 是会话ID,短期内重复连接时,会话可以复用。

Cipher Suites 是客户端支持的加密算法,服务器可以从这个列表里选择它认为最安全的一个算法,后续用来加密数据。

Compression Methods 是客户端支持的压缩算法。
Extensions 是一些扩展。

4.2、Server Hello

第二个包是微博给我返回的 Server Hello,意思是它也要跟我开始握手,协商加密参数。

在这里插入图片描述

Cipher Suite是服务器选择的加密算法,握手完成后会用这个算法加密数据。

Compression Method 是服务器选择的压缩算法,这里是null,说明没选,数据不被压缩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/548281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示16行点x16列点字模的功能

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示16行点x16列点字模的应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示…

javaweb在线拍卖系统

项目采用技术栈 htmlcssjs Vue2.js axios.js tomcat Servlet Mybatis Mysql 1.竞拍商品列表 实现多条件分页查询,头部根据是否登录作出不同的判断信息(登录或注销) 2.登录功能 3.竞拍页面 只有登录用户才能竞拍,出价记录需要实现关联用户查询 4.管理员登录增…

STM32芯片软复位导致SRAM2的值被擦除话题

1. 问题描述 客户在使用 STM32L433CCY6 开发过程中,出现软件复位后 SRAM2 里的值被擦除问题。 2. 问题确认 客户用同一版软件在两块板子上的表现还不一样,一块软件复位后 SRAM2 的值不会被擦除,另一块则会被擦除,并且确认被擦除…

光场相机建模与畸变校正改进方法

摘要:光场相机作为一种新型的成像系统,可以直接从一次曝光的图像中得到三维信息。为了能够更充分有效地利用光场数据包含的角度和位置信息,完成更加精准的场景深度计算,从而提升光场相机的三维重建的精度,需要实现精确…

Matlab方程组拟合【案例源码+视频教程】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法,并提供所有案例完整源码;2.…

llama_factory微调QWen1.5

GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100 LLMsUnify Efficient Fine-Tuning of 100 LLMs. Contribute to hiyouga/LLaMA-Factory development by creating an account on GitHub.https://github.com/hiyouga/LLaMA-FactoryQwen1.5 介绍 | QwenGITH…

Python(11):网络编程

文章目录 一、一些基本概念二、软件的开发架构(c/s架构和b/s架构)三、OSI模型四、socket套接字编程1.socket编程过程2.python中的socket编程 一、一些基本概念 来了解一些网络的基本概念 名词解释IP(互联网协议地址)IP用来标识网…

【Redis 神秘大陆】001 背景基础理论

一、背景&基础理论 1.1 什么是缓存 缓存:存储在计算机上的一个原始数据复制集,以便于访问——维基百科 1.2 为什么用缓存 提升用户体验: 【即效率、效益和基本主观满意度】CAST 使用者的状态、系统性能及环境,不同的人对于…

二维码生成器怎么做网址活码?链接制作二维码的方法

如何使用网址二维码生成器的功能来制作二维码呢?现在很多人会将网址生成二维码之后,分享给其他人通过手机扫码来打开网页获取内容,这种方式有利于网页的快速传播与分享,而且可以让更多的人同时访问对应的网页。那么网址转二维码的…

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图: 我们选择第一个 点击下一步下一步: 继续下一步直到结束: 二,具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库,如果以后…

【C++程序员的自我修炼】日期类Date的实现

山河日月镌刻璀璨初心 八载春秋写就举世华章 目录 日期类Date的实现 构造函数 拷贝构造函数 获取月份天数的函数 日期类的检查 日期类的打印 运算符重载日期类的比较 运算符重载> 运算符重载 运算符的复用 日期加天数 日期减天数 ​编辑 运算符重载 运算符重载- 日期类的前…

11.盛最多水的容器(Java,双指针)

目录 题目描述:输入:输出:代码实现: 题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同…

PHP01——php快速入门 之 在Mac上使用phpstudy快速搭建PHP环境

PHP01——php快速入门 之 在Mac上使用phpstudy快速搭建PHP环境 0. 前言1. 下载小皮面板1.1 下载phpstudy(小皮面板)1.2 启动、简单访问1.2.1 启动Apache1.2.2 访问1.2.3 访问自定义文件或页面 2. 创建网站2.1 创建网站2.2 可能遇到的问题2.2.1 hosts权限…

企业指标开发流程新主张

作为数据开发人员,你是否在指标开发过程中有过如下苦恼: Q1、 (甲方)业务人员:你这个指标计算逻辑不对,我们前期不是这么对的。 (乙方)卑微的你:Fu*k……我有录音。 …

创建和使用pipenv

创建pipenv 1.环境区别2.安装pipenv3.使用1.创建项目名称2.创建pipenv环境3.安装包1.安装包卡顿或卡住 4.查看包之间联系5.进入虚拟环境6.只安装dev环境的包7.常见的pipenv指令 1.环境区别 真实环境 真实环境可能被系统的其他软件依赖,下载包可能导致其他软件环境变…

Spark Standalone模式部署

准备至少2台虚拟机,装好linux系统,我装的是Ubuntu20.04。 1.修改主机名(每台) 1)修改/etc/hostsname内容,主节点改为master,子节点改为slaver1 sudo vim /etc/hostname 2)在/etc/…

【面试经典 150 | 数学】阶乘后的零

文章目录 写在前面Tag题目来源题目解读解题思路方法一:数学优化计算 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结…

防御性编程失败,我开始优化我写的多重 if-else 代码

最近防御性编程比较火,码农出身(前后端内推)的我不得试试 不出意外我被逮捕了,组内另外一位同事对我的代码进行了 CodeReview,我的防御性编程编程没有幸运逃脱,被标记上了“多重 if-else ”需要进行优化。 …

数据结构速成--链表

由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。 目录 一…

中仕公考:2024山东高校毕业生“三支一扶”开始报名

2024年度山东省高校毕业生‘三支一扶’计划开始报名,此次全省共计招募1350名。 招募范围: 30周岁及其以下的山东省内普通高校全日制毕业生(1993年4月以后出生) 报名时间:2024年4月16日9:00—4月20日16:00 查询时间:2024年4月1…
最新文章