【网络安全技术】传输层安全——SSL/TLS

一、TLS位置及架构

TLS建立在传输层TCP/UDP之上,应用层之下。

所以这可以解决一个问题,那就是为什么抓不到HTTP和SMTP包,因为这两个在TLS之上,消息封上应用层的头,下到TLS层,TLS层对上层消息整个做了加密,然后套了TLS头下到传输层,套上TCP头给IP,IP套上IP头然后路由,找到下一跳之后ARP问MAC地址,然后封上MAC头,进链路层传输。所以能看到的是TLS头、TCP头,IP头和MAC头。

下面这个图是TLS的架构,TLS内部也分了层,最上层相当于是消息的类型,这几种类型的消息都要下到Record层,套Record头,走Record结构来传输。

握手协议就是建连接的,改变Cipher spec协议就是协商用到的加密算法什么的东西的,Alert协议是返回一些警报,HTTP就是正常的加密的数据,心跳协议是用来维持连接的。

等下可以通过抓到的包来更清晰的看出来这个架构。

二、TLS握手协议

整体流程如下,从RFC 5246文档里偷过来的,

      Client                                               ServerClientHello                  -------->ServerHelloCertificate*ServerKeyExchange*CertificateRequest*<--------      ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished                     -------->[ChangeCipherSpec]<--------             FinishedApplication Data             <------->     Application Data

1.Phase 1

一步一步看,先看绿色框起来的两个hello

client hello是第一个消息,注意区分这个握手和TCP握手之间的区别,TCP三次握手是建TCP连接用的,而TLS要走TCP连接,所以在TLS握手之前,TCP已经握完三次手了。

这是访问一个页面https协议的过程,虽然不知道为什么所有包都有两个,但还是可以清晰地看出,TCP三次握手是在TLS ClientHello之前完成的,同时,看TLS下面的这两个TCP ACK,这也说明了TCP在TLS之下,所以TLS不能加密TCP的头。

我们来看看这个hello包长什么样。首先能看出TLS所在的层级,正如刚才所说,他在TCP之上。

其次TLS的内容,这里是handshake Protocol,使用TLS Record protocol封装,所以TLS的所有内容协议,包括握手协议、改变Cipher spec协议、Alert协议、HTTP、心跳协议都是走Record Layer的,所以实际上TLS分两层,在TCP紧上面那层是Record 协议,然后在上边是剩下的协议。

然后看内容吧,对比刚才那张图,这里包括了TLS的版本,随机数,session ID,cipher suite(也就是客户端能接受的加密、认证、密钥交换算法),还有压缩方法。剩下的一堆extension列出了更加细节的客户端所支持的算法,这样服务器只能在这些列出的里面选择。

接下来是Server hello,

他会选择一系列的方法,作为响应回复给Client。这里的一些extension例如session_ticket是用来当session断开时客户端快速连接到服务器的凭证,以及下面的对于应用层协议的下协商。

2.Phase 2

这里阶段二还是抓个包看看,这wireshark不知道抽什么风,这三个Certificate,Server Key Exchange和Server Hello Done都在一层的一个包里,他给分了两个。

看这三个东西还都是封到了Record Layer里,这三个分别顾名思义,证书就是服务器把他的X.509证书给客户端,交换密钥就是服务器通过hello里跟客户端商量的协商密钥算法来交换公钥,这里是椭圆曲线DH。这之后还有可选的服务器向客户端要证书。之后就是server hello done表示他这边结束了,该客户端了。

别忘了这些包都是走的TCP,到了对方那都要回ACK的。

3.phase 3

前面二阶段server发来的证书,client首先会验一下真假,使用CA的公钥来验证证书的签名。对了之后,首先,如果先前服务器要了客户端的证书,客户端会先把他的证书回给服务器。然后他会用server的公钥来验server发来的key exchange参数的签名,之后再生成自己的公钥交换信息,

这就是下面抓到的包,第一个就是client Key exchange的record。

接下来还有一个certificate verify,这个是只有刚才客户端发送了有签名能力的证书才有的一步。

4.phase 4

然后是Change Cipher Spec,这个消息你看长度就1字节,他就是简单的告诉对方我已经将刚才咱们商量的加密什么的投入使用了,所以他发的接下来的包都是使用刚才协商好的东西加密或认证的了。在这之前,客户端和服务器交换完密钥,获得了一个比如DH公共秘密之后,这个公共秘密叫做pre-master secret,这个结合一些其他的例如随机数之类的信息,再来生成最终的session key,Change Cipher Spec代表的就是这个最终的session key投入使用。

后面跟的是client finished,这个永远紧跟在Change Cipher Spec之后,用于验证整个握手的成功。客户端会计算之前所有的握手消息的一个mac,加密之后传给服务器。所以下面抓的包显示这是加密的信息。

这之后,服务器端收到刚才客户端发来的那条消息之后,由于之前在hello里说好了要有new session ticket用来之后快速恢复session,所以这第一个record就是new session ticket,然后是服务器端的Change Cipher Spec,之后是服务器的finish,和client的同理,是计算先前的所有握手消息的mac,同样是加密之后发送。

这之后握手就结束了,这期间任何的错误都会引起alert协议报错,从而终止过程。

三、Alert Protocol

这个就是报各种错误,包括下面这些

• bad_record_mac

• handshake_failure

• decryption_failed

• bad_certificate

四、Heartbeat protocol

这个就是周期性的发送信号,比如用来同步。

他有两个目的,一个是确保双方还活着,另一个是防止有些防火墙会关闭空闲连接。

五、Record protocol

这个刚才也看了,就是封装刚才提到的所有的东西的,格式就是下面这样

content type就会是比如刚才所有握手阶段的Record都是handshake(22),实际发的包的type会是Application Data(23),也可能回事Alert(21)等等。

两个Version就是哪个版本,前面讲的例子都是TLSv1.2,长度就是后面的东西有多长。

接下来看看这个Record是怎么生成的吧,比如有加密、认证、分段、压缩等步骤。

首先拿到具体的数据之后,要分成小于等于2的14次方byte的段,然后如果之前协商了压缩,那么就会压缩。

接下来计算MAC然后接上去,对整个东西加密,然后再套上TLS Record的头,这就是完整的TLS处理完的,可以直接发给下层TCP的东西了。

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

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

相关文章

数的划分(递归)

题目名字 数的划分 题目链接 题意 给数字n&#xff0c;讲数字n分为m份&#xff0c;共有多少种分法&#xff0c;不能重复&#xff0c;分成一样的数字也不行 思路 看到这种分数字的先化成有多少个球要分到多少个篮子里去再想两个分法并且加起来&#xff0c;一个是每个篮子最多只…

<JavaEE> 经典设计模式之 -- 单例模式(“饿汉模式”和“懒汉模式”实现单例模式)

目录 一、单例模式概述 二、“饿汉模式”实现单例模式 三、“懒汉模式”实现单例模式 3.1 单线程下的“懒汉模式” 3.2 多线程下的“懒汉模式” 一、单例模式概述 1&#xff09;什么是单例模式&#xff1f; 单例模式是一种设计模式。 单例模式可以保证某个类在程序中只存…

【Java数据结构 -- 顺序表】

List和ArrayList与顺序表 一. List1.1 List介绍2.1 常见接口介绍3.1 List的使用 二. ArrayList与顺序表1.线性表2.顺序表2.1 接口的实现2.2 顺序表的创建2.3 顺序表的打印2.4 顺序表的插入2.5 顺序表的按索引位置插入数据2.6 判断顺序表是否包含某个数2.7 返回顺序表某个数的索…

Java 22种设计模式详解

22种设计模式详解 创建型模式单例模式工厂方法模式抽象工厂模式建造者模式原型模式 结构型模式适配器模式桥接模式组合模式装饰器模式代理模式外观模式享元模式享元模式原理&#xff1a;享元模式角色&#xff1a;示例代码&#xff1a; 行为型模式模板方法模式原理角色示例代码命…

UEFI 学习笔记

引言 相比于Windows/MacOS/Linux等主流的操作系统,大部分人对于固件BIOS(Basic Input & Output System)并不熟悉,它诞生于1981年出产的第一代个人计算机IBM PC,在那时工程师将硬件检测代码、最基本的外围设备I/O处理程序和操作系统引导程序代码写入仅有32KB大小的PRO…

(1)(1.4) ESP32 wifi telemetry

文章目录 前言 1 用于ESP32的DroneBridge 2 推荐的硬件 3 下载和烧录固件 4 为ESP32配置DroneBridge 前言 ESP32 是现成的 Wi-Fi 模块&#xff0c;具有完整的 TCP/IP 协议栈和微控制器功能。它们提供专用的 UART、SPI 和 I2C 接口。它们可与任何 ArduPilot 自动驾驶控制器…

2023-12学习笔记

1.NonNull要手动写无参构造器 这是一个我今天研究了很久的问题&#xff0c;开始不知道原因是在这里&#xff0c;还在那想是不是Data覆盖了无参构造&#xff0c;结果当然不是。先说下解决历程 1.问题起因 通过RequestBody接收前端报文的时候报错&#xff0c;大致是说我构造方…

python中tkinter实现GUI程序:三个实例

python中tkinter实现GUI程序 写在最前面Python中使用Tkinter实现GUI程序的基本元素Tkinter简介基本元素1. 根窗口&#xff08;Root Window&#xff09;2. 小部件&#xff08;Widgets&#xff09;3. 布局管理4. 事件处理 1.用 tkinter实现一个简单的 GUI程序,单击“click”按钮&…

项目方看过来,详解Moonbeam Grants申请技巧

Grants加速计划是Moonbeam基金会发起的生态资助计划&#xff0c;旨在支持生态系统中的不同项目、社区和个人&#xff0c;帮助他们顺利进入Moonbeam发展&#xff0c;依靠早期的生态扶持迅速成长。 每一份Grant计划旨在融合社区参与、包容性和透明度等特性&#xff0c;加速Moonb…

Java项目-瑞吉外卖Day3

填充公共字段&#xff1a; 目的&#xff1a;由于某些属性&#xff0c;例如createdTime这些需要填充的字段会在多个地方出现&#xff0c;所以考虑使用公共字段自动填充的办法减少重复代码。 在对应属性上加入TableField注解。通过fill字段表明策略&#xff0c;是插入/更新的时候…

Android studio之ConstraintLayout使用

文章目录 优势使用ConstraintLayout的步骤使用多种方式定义控件的位置 优势 ConstraintLayout是一个相对布局&#xff0c;是在Android 2.3版本中引入的。它可以在不同的屏幕大小和分辨率中提供一致的布局&#xff0c;并且是支持复杂布局的最佳选择之一。ConstraintLayout相对于…

ROS2+ROS_DOMAN_ID

The ROS_DOMAIN_ID Table of Contents Overview Choosing a domain ID (short version) Choosing a domain ID (long version) Platform-specific constraints Participant constraints Domain ID to UDP Port Calculator Overview As explained elsewhere, the de…

Dockerfile模板和Docker Compose模板

记录一下Dockerfile模板和Docker Compose模板&#xff0c; 基础的系统加JDK环境来构建一个Java应用&#xff0c;其Dockerfile内容如下&#xff1a; # 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/local…

如何搭建废品上门回收小程序

如今&#xff0c;随着环境保护意识的增强&#xff0c;废品的回收和再利用变得越来越重要。为了方便人们进行废品回收&#xff0c;搭建一个废品上门回收的小程序成为了一个不错的选择。本文将介绍如何从零开始搭建一个废品上门回收小程序。 …

vue宝典之项目结构介绍

文章目录 &#x1f341;前言&#x1f341;Vue.js基本概念&#x1f341;Vue.js核心特性&#x1f341;Vue.js应用场景&#x1f341;Vue项目结构&#x1f341;Vue开发流程 目前在学习vue项目&#xff0c;之前只是学习vue中基本语法&#xff0c;当接触项目时发现vue项目结构之间配置…

【Go自学版】02-goroutine

利用时间片分割进程&#xff0c;致使宏观上A,B,C同时执行&#xff08;并发&#xff09; CPU利用率包含了执行和切换&#xff0c;进程/线程的数量越多&#xff0c;切换成本也会增大 最大并行数&#xff1a;GOMAXPROCS work stealing: 偷其他队列的G hand off: 当前G1阻塞&#…

css 修改滚动条样式,解决Windows浏览器中滚动条不美观问题

Windows环境中的浏览器中滚动条默认是直接显示了&#xff0c;不管光标是否进入该区域&#xff0c;这样就很不美观&#xff0c;如下图&#xff1a; 之前样式为 .well {display: block;background-color: #f2f2f2;border: 1px solid #ccc;margin: 5px;width: calc(100% - 12px);h…

mycat部署和配置读写分离(二)

说明&#xff1a; MyCAT 是使用 JAVA 语言进行编写开发&#xff0c;使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性&#xff0c;所以要求必须在 JDK7 以上的版本上运行。 1. jdk1.8安装 详见jdk环境安装 2. Mysql安装 详见mysql8.0.11源码安装…

websoket 的使用

WebSocket是HTML5的API之一&#xff0c;允许浏览器和服务器之间进行双向通信。Vue.js可以轻松地与WebSocket API集成&#xff0c;使用原生WebSocket API或其他WebSocket库&#xff08;如socket.io&#xff09;都是可行的。 下面是一个使用Vue.js实现WebSocket的简单示例&#…

【lesson11】数据类型之string类型

文章目录 数据类型分类string类型set类型测试 enum类型测试 string类型的内容查找找所有女生&#xff08;enum中&#xff09;找爱好有游泳的人&#xff08;set中&#xff09;找到爱好中有足球和篮球的人 数据类型分类 string类型 set类型 说明&#xff1a; set&#xff1a;集…