【计算机网络_应用层】https协议——加密和窃密的攻防

文章目录

  • 1.https协议的介绍
  • 2. 加密和解密
    • 2.1 什么是加密
    • 2.2 常见的加密方式
      • 2.2.1 对称加密
      • 2.2.2 非对称加密
    • 2.3 数据摘要(数据指纹)
    • 2.4 数字签名
  • 3. https协议的加密和解密
    • 方案一:使用对称加密(❌)
    • 方案二:使用非对称加密(❌)
    • 方案三:双方都使用非对称加密(❌)
    • 方案四:非对称加密+对称加密(❌)
    • 中间人攻击问题
    • 证书&CA认证
    • 方案五:证书认证+非对称加密+对称加密(✔️)

1.https协议的介绍

在上一篇博文中我们讲到了http协议,发现http协议传输的所有内容就是明文的,那么如果存在中间人在客户端和服务端之间的话,中间人是完全可以看到客户端和服务端之间的传输报文内容的,甚至可以篡改内容,所以就出现了https协议。

https协议是在http协议的基础上引入了一个加密层。

2. 加密和解密

2.1 什么是加密

加密:就是指把明文(要传输的信息)经过一系列的变化,生成密文

解密:就是把密文再经过一系列的变化,还原成明文

举个例子:假设我们想要传递一个变量a里面的值,那么如果直接传输明文,就会出现泄露的风险,所以这个时候我们使用另一个变量key,将key ^ a的值传输过去,中间人不知道这个key,所以就不会泄露,对方是有这个key的,所以对方拿到我们传输的结果再异或key,也就是key ^ a ^ key,那么最后的结果就还是a,就能够让对方拿到真实的结果。

这个过程就类似加密和解密的过程,其中的key就是密钥。当然真实的加密和解密不会有这么简单。

2.2 常见的加密方式

2.2.1 对称加密

采用单钥密码系统的加密方法,同一密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密

  • 对称加密的特征:加密和解密的密钥是相同的
  • 常见对称对称加密算法(了解一下):DES、3DES、AES、TDEA、Blowfish、RC2等
  • 特点:算法公开、计算量小、加密速度快、加密效率高

就像我们最开始举的例子:把原文异或上key作为密文,在使用key异或密文获取原文的过程就是使用对称加密的方式进行加密和解密

2.2.2 非对称加密

非对称加密需要两个密钥来进行加密和解密:两个密钥分别是公开密钥(public key,公钥)和私有密钥(private key,私钥)

  • 常见非对称加密算法(了解):RSA,DSA,ECDSA

  • 非对称加密的特征:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。 公钥和私钥是配对的. 最⼤的缺点就是运算速度非常慢,比对称加密要慢很多。公钥可以认为是一把锁,私钥是锁的钥匙,锁给谁都行,但是只有持有私钥的人才能打开。

  • 通过公钥对明文进行加密,形成密文

  • 通过私钥对密文进行解密,得到明文

当然也可以反着用,通过私钥加密公钥解密

2.3 数据摘要(数据指纹)

  • 数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改,如果对数据某个地方进行小小的改动,重新生成的哈希摘要也和改动前的大不一样。

  • 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)

  • 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行前后数据的对比,观察数据是否被修改过,也可以用于实现网盘的秒传功能、公司数据库密码存储等。

  • 涉及到用户密码的字段,都是要加密的。一般数据库中的密码字段,长度是固定的(便于设计表结构),会将用户密码生成哈希摘要。每次用户登录时都将转换成哈希摘要与数据库的哈希摘要进行对比,所以数据库泄露也不怕

2.4 数字签名

  • 对摘要经过加密,得到的就是数字签名。签名的形成是基于非对称加密算法。

3. https协议的加密和解密

在网络通信过程中,我们需要解决的问题就是(1. 数据被监听; 2. 数据被篡改),针对这个问题,我们提出了解决方法,当然解决方法可能是有问题的,所以接下来就通过提出问题->解决问题的方式来讲解

方案一:使用对称加密(❌)

如果在通信之前通信双方约定了一个密钥,在通信的时候使用密钥把明文首先加密称为密文,然后再发送密文,这种方式就能够实现加密通信(除非密钥被破解)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是一台服务器将来可能面对多个客户端,为了区分每个客户端的不同,所以每个客户端的密钥肯定得不一样。那么服务器怎么知道每个客户端的密钥分别是什么?所以提出的解决方案就是让每个客户端和服务端通信的时候会重新创建一个单独的密钥

image-20240310150025019但是如果只使用对称加密,就没有办法解决让密钥如何让对方安全的收到的问题。

方案二:使用非对称加密(❌)

非对称加密既可以使用公钥加密,也可以使用私钥加密。但是使用公钥加密必须使用私钥解密,使用私钥加密必须使用公钥解密。

考虑到非对称加密的机制,如果服务器先把公钥以明文的方式传输给浏览器,之后浏览器向服务器发送的数据都是用这个公钥加密,然后再传输,这样发送的就是密文了,服务器收到使用公钥加密的密文之后使用私钥解密拿到明文,这样似乎就保证了浏览器到服务器的通信安全,那么反过来服务器到客户端呢?

方案三:双方都使用非对称加密(❌)

  1. 服务端拥有公钥S与对应的私钥S’,客户端拥有公钥C与对应的私钥C’
  2. 客户端与服务端交换公钥(此时客户端拥有S和C’,服务端拥有S’和C)
  3. 客户端给服务端发消息:先使用S对数据加密再发送,只能由服务端解密
  4. 服务端给客户端发消息:先使用C对数据加密再发送,只能由客户端解密

这样似乎就解决问题了,但是依然还有两个问题

  • 效率太低
  • 还是有安全问题

方案四:非对称加密+对称加密(❌)

先解决效率问题:

image-20240310150040519

  • 服务端具有⾮对称公钥S和私钥S’
  • 客⼾端发起https请求,获取服务端公钥S
  • 客⼾端在本地⽣成对称密钥C,通过公钥S加密,发送给服务器.
  • 由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密钥(真的吗?)
  • 服务器通过私钥S’解密,还原出客⼾端发送的对称密钥C.并且使⽤这个对称密钥加密给客⼾端返回的响应数据.
  • 后续客⼾端和服务器的通信都只⽤对称加密即可.由于该密钥只有客⼾端和服务器两个主机知道,其
    他主机/设备不知道密钥即使截获数据也没有意义

但是上述的通信方式都会有一个共同的问题:如果再最开始的时候中间人就已经开始攻击了怎么办?

中间人攻击问题

确实,在⽅案2/3/4中,客⼾端获取到公钥S之后,对客⼾端形成的对称秘钥X⽤服务端给客⼾端的公钥S进⾏加密,中间⼈即使窃取到了数据,此时中间⼈确实⽆法解出客⼾端形成的密钥X,因为只有服务器有私钥S’

但是中间⼈的攻击,如果在最开始握⼿协商的时候就进⾏了,那就不⼀定了,假设hacker已经成功成为中间⼈

  1. 服务器具有⾮对称加密算法的公钥S,私钥S’
  2. 中间⼈具有⾮对称加密算法的公钥M,私钥M’
  3. 客⼾端向服务器发起请求,服务器明⽂传送公钥S给客⼾端
  4. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M,并将伪造报⽂发给客⼾端
  5. 客⼾端收到报⽂,提取公钥M(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥X,⽤公钥M加密X,形成报⽂发送给服务器
  6. 中间⼈劫持后,直接⽤⾃⼰的私钥M’进⾏解密,得到通信秘钥X,再⽤曾经保存的服务端公钥S加密后,将报⽂推送给服务器
  7. 服务器拿到报⽂,⽤⾃⼰的私钥S’解密,得到通信秘钥X
  8. 双⽅开始采⽤X进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改,都是可以的

上⾯的攻击⽅案,同样适⽤于⽅案2,⽅案3

问题本质出在哪⾥了呢?客户端无法确定收到的含有公钥的数据报⽂,就是目标服务器发送过来的!

证书&CA认证

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。客户端向服务器请求公钥时,服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如⾝份证,是服务端公钥的身份证明

image-20240310151622129

这个证书可以理解成是⼀个结构化的字符串, ⾥⾯包含了以下信息:证书发布机构、证书有效期、公钥、证书所有者、签名等

申请证书的时候,需要在特定平台⽣成CSR,同时⽣成公钥和私钥。这对密钥就是用来在⽹络通信中进行明文加密以及数字签名时使用的。

其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端自己保留,后续用于通信使用(主要就是⽤来交换对称密钥)

数字签名

image-20240310151702666

当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如
下:

  1. CA机构拥有⾮对称加密的私钥A和公钥A’
  2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
  3. 然后对数据摘要⽤CA私钥A’加密,得到数字签名S服务端申请的证书明⽂和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了

方案五:证书认证+非对称加密+对称加密(✔️)

在客户端和服务器刚⼀建⽴连接的时候,服务器给客⼾端返回⼀个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息

image-20240310150503382

当客户端获取到这个证书之后,会对证书进行校验,包括

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(受信任的机构再OS中已经内置)
  • 验证证书是否被篡改:从系系统中拿到该证书发布机构的公钥,对签名进行解密,得到一个hash值(数据摘要),我们称它为hash1,然后计算整个证书的hash值,成为hash2,对比hash1和hash2是否相等,如果相等就表示证书没有被篡改过

事实上我们在浏览器中是能看到的

image-20240310151015334

中间人有没有可能篡改该证书?

  • 中间⼈篡改了证书的明⽂
  • 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
  • 如果强行篡改,客户端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防止信息泄露给中间⼈

中间人整个掉包证书?

  • 因为中间⼈没有CA私钥,所以⽆法制作假的证书(为什么?)
  • 所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包
  • 这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
  • 永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的

所以最终HTTPS的加密流程如下:

image-20240310152047050

涉及到的密钥

第⼀组(⾮对称加密):⽤于校验证书是否被篡改.服务器持有私钥(私钥在形成CSR⽂件与申请证书时获
得),客⼾端持有公钥(操作系统包含了可信任的CA认证机构有哪些,同时持有对应的公钥).服务器在客
⼾端请求是,返回携带签名的证书.客⼾端通过这个公钥进⾏证书验证,保证证书的合法性,进⼀步保
证证书中携带的服务端公钥权威性。

第⼆组(⾮对称加密):⽤于协商⽣成对称加密的密钥.客⼾端⽤收到的CA证书中的公钥(是可被信任的)
给随机⽣成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥.

第三组(对称加密):客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.


本节完…
证,保证证书的合法性,进⼀步保
证证书中携带的服务端公钥权威性。

第⼆组(⾮对称加密):⽤于协商⽣成对称加密的密钥.客⼾端⽤收到的CA证书中的公钥(是可被信任的)
给随机⽣成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥.

第三组(对称加密):客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.


本节完…

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

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

相关文章

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

react-面试题

一、组件基础 1. React 事件机制 <div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&#xff0c;React将事…

小蓝的漆房——算法思路

题目链接&#xff1a;1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn) 本题只要是通过枚举的方法&#xff0c;算出涂成每一种颜色所需的天数&#xff0c;最后在所有天数中找出最小值&#xff08;由题可知&#xff0c;最多只有60种颜色&#xff0c;所以可以尝试算出每种颜色所需的时间&am…

Linux网络编程: IP协议详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…

操作系统内功篇:硬件结构之如何写出让CPU执行更快的代码?

一 前言 因为CPU要操作的数据都在CPU Cache中的话&#xff0c;就不用再从内存中读取数据了&#xff0c;这样就提高了效率&#xff0c;访问的数据在CPU Cache中越多&#xff0c;有个专业名词称为缓存命中率高&#xff0c;所以说&#xff0c;缓存命中率越高&#xff0c;自然执行…

sqllab第三关通关笔记

知识点&#xff1a; 通过回显的信息判断原始语句的组成猜测该语句为 select 1,2,3 from 表名 where id (输入) limit 0,1 首先通过测试判断存在什么类型的sql注入 构造id1/0 发现正常输出&#xff1b;说明是字符型的sql注入 好了&#xff0c;下面就测试有什么限制条件 构造…

考研C语言复习进阶(2)

目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 4. 函数指针 5. 函数指针数组 6. 指向函数指针数组的指针 7. 回调函数 8.三步辗转法 9. 指针和数组笔试题解析 10. 指针笔试题 指针的主题&#xff0c;我们在初级阶段的《指…

springboot整合swagger,postman,接口规范

一、postman介绍 1.1概述 工具下载 Postman&#xff08;发送 http 请求的工具&#xff09; 官网&#xff08;下载速度比较慢&#xff09;&#xff1a;Download Postman | Get Started for Free 网盘下载&#xff1a;百度网盘 请输入提取码 1.2Http 请求格式 请求地址请求方法状…

数据结构从入门到精通——堆

堆 前言一、二叉树的顺序结构及实现 (堆&#xff09;1.1二叉树的顺序结构1.2堆的概念及结构 二、堆的练习题答案 三、堆的实现3.1堆向下调整算法3.2堆的创建3.3建堆时间复杂度3.4堆的插入3.5堆的删除3.6堆的代码实现 四、堆的具体实现代码Heap.hHeap.cTest.c堆的初始化堆的销毁…

人人站CMS后台登不进去解决方案(已解决)

公司有一个网站使用的是人人站CMS&#xff0c;最近发现后台登录不进去&#xff0c;有以下报错 发生以下错误: file get contents(http://www.rrzcms.com/Public/cms/config/config.ison): failed to open stream: HTTP reguest failed! 请求的URL导致内部服务器错误。 如果您反…

监视和内存观察

监视和内存观察 5.监视和内存观察5.1 监视5.2 内存 5.监视和内存观察 在调试的过程中我们&#xff0c;如果要观察代码执行过程中&#xff0c;上下文环境中的变量的值&#xff0c;有哪些方法呢&#xff1f; 这些观察的前提条件一定是开始调试后观察&#xff0c;比如&#xff1…

Docker出现容器名称重复如何解决

假如你的重复容器名称是mysql5 删除已存在的容器&#xff1a;如果你不再需要那个已经存在的名为“mysql5”的容器&#xff0c;你可以删除它。使用下面的命令&#xff1a; docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除&#xff0c;你就可以重新使用这个…

【开发】微服务整合Sentinel

目录 前言 1W&#xff1a;什么是Sentinel&#xff1f; 2W&#xff1a;为什么使用Sentinel&#xff1f; 3W&#xff1a;如何使用Sentinel&#xff1f; 1. 在pom.xml中导入Sentinel依赖坐标 2. 配置控制台 3. 访问API接口的任意端点 流量控制 1. 簇点链路 2. 快速入门…

PCM和I2S区别

I2S和PCM接口都是数字音频接口&#xff0c;而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口&#xff0c;是不是两个接口有各自不同的应用呢&#xff1f;先来看下概念。 PCM&#xff08;PCM-clock、PCM-sync、PCM-in、PCM-out&#xff09;脉冲编码调制&#xff0c;模拟语音信…

Unity WebGL服务器标头的问题

目录 现象&#xff1a; 报错文本: 原因: 解决方案: 现象&#xff1a; 打包前&#xff0c;ProjectSetting 压缩选项设置为Brotli, 将打包的WebGL部署到阿里云OSS环境后&#xff0c;运行弹框提示错误. 报错文本: Unable to parse Build/WebGL.framework.js.br! This canha…

Elasticsearch 索引库操作 文档操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。要向es中存储数据&#xff0c;必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a; 字段数据类型&#xff0c;常见的简…

记一些有关Element Plus的样式修改

先记一个放着&#xff0c;后续慢慢补充。。。 一个 Vue 3 UI 框架 | Element Plus Radio 单选框 1、去除radio的圆圈 .box-radio {/deep/ .el-radio__input {display: none;} }

LLM之RAG实战(二十九)| 探索RAG PDF解析

对于RAG来说&#xff0c;从文档中提取信息是一种不可避免的场景&#xff0c;确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。 文件解析过程在RAG中的位置如图1所示&#xff1a; 在实际工作中&#xff0c;非结构化数据比结构化数据丰富得多。如果这些海量数据无…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset&#xff08;&#xff09;&#xff0c;动物将返回到的默认姿势。 Current …

如何使用ArcGIS Pro生成带计曲线等高线

等高线作为常见的地图要素经常会被使用到&#xff0c;一般情况下生成的等高线是不带计曲线的&#xff0c;在某些情况下我们需要带计曲线的等高线&#xff0c;这里为大家介绍一下ArcGIS Pro生成带计曲线等高线的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数…