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

news2025/2/6 1:06:42

「作者简介」: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.coloradmin.cn/o/1598806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java开发指南 | 第三篇】Java 空行、强制类型转换及基本数据类型

读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 Java 空行强制类型转换Java 基本数据类型内置数据类型引用类型 Java 空行 空白行或者有注释的行,Java 编译器都会忽略掉。 强制类型转换 当需要将一个数据类型转换为另一个数据类型时&#xff0c…

DBA面试总结(Mysql篇)

一、delete与trancate的区别 相同点 1.两者都是删除表中的数据,不删除表结构 不同点 1.delete支持按条件删除,TRUNCATE不支持。 2.delete 删除后自增列不会重置,而TRUNCATE会被重置。 3.delete是逐条删除(速度较慢&#xff09…

java:多线程中的死锁

多线程:死锁 当多个线程互相争抢资源导致都在互相等待资源的僵局时,如果没有外力,将会一直僵持下去,这就是死锁. 就像两个人分一双筷子,如果一人拿到一根筷子,都在等待对方手里的那根,将没有人能完成吃饭的任务. 死锁的必要条件 1,互斥 即资源只能被一个线程调用 2,不可剥…

STL的stack和queue(三):基于适配器模式的反向迭代器

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类: 单向:forward_list双向:list随机:vector / deque 迭代器按功能分类: 正向反向const list的反向迭代器…

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

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

(最新)华为 2024 届实习招聘-硬件通⽤/单板开发——第十一套和十二套

(最新)华为 2024 届实习招聘-硬件通⽤/单板开发——第十一套和十二套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共十套)获取&#xff…

InnoDB架构:内存篇

InnoDB架构:内存篇 InnoDB是MySQL数据库中默认的存储引擎,它为数据库提供了事务安全型(ACID兼容)、行级锁定和外键支持等功能。InnoDB的架构设计优化了对于读取密集和写入密集型应用的性能表现,是一个高度优化的存储系…

逆向IDA中Dword,数据提取

我们可以看见数据是这样的&#xff0c;第一个是1cc 但是我们shifte就是 这个因为他的数据太大了&#xff0c;导致高位跑后面去了 这个时候&#xff0c;我们右键——convert——dword 这样就可以提取到争取的数据了 比如第一个数据 0x1cc a0xcc b0x1 print(hex((b<<8…

李沐25_使用块的网络VGG——自学笔记

VGG架构 1.多个VGG块后接全连接层 2.不同次数的重复块得到不同的架构 VGG-16、VGG-19 3.更大更深的AlexNet ##经典卷积神经网络的基本组成部分是下面的这个序列&#xff1a; 1.带填充以保持分辨率的卷积层&#xff1b; 2.非线性激活函数&#xff0c;如ReLU&#xff1b; …

zabbix升级后图形文字不显示

原版本升级后版本6.4.76.4.13 问题现象 更新小版本后zabbix数据图形都有&#xff0c;只有下方文字不显示 处理方式 下载win字体&#xff0c;根据自己选择&#xff0c;上传至/usr/share/zabbix/assets/fonts目录下&#xff0c;修改文件名为jianti.ttf 修改默认字体配置文件…

新项目应该选mongodb还是postgresql?

文章目录 MongoDBPostgreSQL大数据处理时的优势对比实际使用经验 选择MongoDB还是PostgreSQL作为新项目的数据库&#xff0c;主要取决于项目的具体需求、数据模型、应用场景以及团队熟悉程度等因素。下面将从几个关键角度对两者进行对比分析。 MongoDB 数据模型&#xff1a;Mo…

Django中的静态文件、路径、访问静态文件的方法

1.什么是静态文件 不能与服务器端做动态交互的文件都是静态文件 如:图片,css,js,音频,视频,html文件(部分) 2.静态文件配置 在 settings.py 中配置一下两项内容: 1.配置静态文件的访问路径 通过哪个url地址找静态文件 STATIC_URL ‘/static/’ 说…

zabbix 监控网络设备之 smnpwalk简单使用

安装&#xff1a; sudo yum install net-snmp net-snmp-utils 设备MIB文件查看OID&#xff1b; [rootzabbix ~]$snmpwalk -v 2c -c public 192.168.1.100 1.3.6.1.4.1.2011.6.139.12.1.5.7 SNMPv2-SMI::enterprises.2011.6.139.12.1.5.7.0 INTEGER: 62 所以命令也可以写成…

机器学习之特征选择(Feature Selection)

1 引言 特征提取和特征选择作为机器学习的重点内容&#xff0c;可以将原始数据转换为更能代表预测模型的潜在问题和特征的过程&#xff0c;可以通过挑选最相关的特征&#xff0c;提取特征和创造特征来实现。要想学习特征选择必然要了解什么是特征提取和特征创造&#xff0c;得…

李秘书讲写作告诉你,答辩状这样写才有说服力!你觉得呢?

李秘书讲写作告诉你&#xff0c;答辩状这样写才有说服力&#xff01;你觉得呢&#xff1f; 答辩状是一种法律文书&#xff0c;用于对对方的指控或诉讼进行回应和反驳。为了让答辩状具有说服力&#xff0c;你需要清晰地陈述你的立场、提供证据&#xff0c;并以逻辑和事实为基础…

JS-31-错误传播

一、错误传播 如果代码发生了错误&#xff0c;又没有被try ... catch捕获&#xff0c;那么&#xff0c;程序执行流程会跳转到哪呢&#xff1f; 示例&#xff1a; function getLength(s) {return s.length; }function printLength() {console.log(getLength(abc)); // 3conso…

OpenHarmony轻量系统开发【2】源码下载和开发环境

2.1源码下载 关于源码下载的&#xff0c;读者可以直接查看官网&#xff1a; https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes 本文这里做下总结&#xff1a; &#xff08;1&#xff09;注册码云gitee账号。 &#xff08;2&#xff09;注册码云SSH公钥…

Springboot+Vue项目-基于Java+MySQL的校园周边美食探索及分享平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

一.shell基本知识

目录 1.1为什么学习和使用Shell编程 1.2什么是Shell 1.2.1 shell的起源 1.2.2shell的功能 1.3shell的分类 1.4作为程序设计的语言一—shell 1.5如何学好shell 1.6shell脚本的基本元素 1.7 shell脚本编写规范 1.8 shell脚本的执行方式 1.9 执行脚本的方法 1.10 shel…

ThinkPHP V5.1框架源码

源码下载地址&#xff1a;ThinkPHP V5.1.zip www WEB部署目录&#xff08;或者子目录&#xff09; ├─application 应用目录 │ ├─common 公共模块目录&#xff08;可以更改&#xff09; │ ├─module_name 模块目录 │ │ ├─common.php 模块函数文件 │ │ ├─controll…