【HTTP(3)】(状态码,https)

【认识状态码】

状态码最重要的目的,就是反馈给浏览器:这次请求是否成功,若失败,则出现失败原因

常见状态码:

200:OK,表示成功

404:Not Found,浏览器访问的资源在服务器上没有找到

403:Forbidden,访问被拒绝(没有权限)

405:Method Not Allowed,方法不支持

500:Internal Server Error服务器内部错误

504:Gateway TimeOut,超时,服务器出问题了,响应没有在规定的时间内返回

302:Found,特殊的状态码,重定向,访问A网站自动跳转到B网站,响应中就会返回302这样的状态码,并且在响应头中添加Location属性(包含了B网站的地址)

总结:

状态码中2开头的,都是成功

4开头的,都是客户端这边出问题

5开头的,都是服务器端这边出问题

【https】

【https概念】

也是一个应用层协议,http协议内容都是按照文本方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,可能会出现「运营商劫持」,一些情况下想下载的内容被偷偷替换为别的内容

如何解决?进行加密

https,在http协议的基础上引入了一个加密层,传输时内容被进行了加密,也是通过密文传输的

【密码的核心概念】

明文:要传输的原始数据

密文:把明文进行加密后得到的一个让别人不能理解的数据

加密:明文—>密文

解密:密文—>明文

密钥:进行加密和解密的重要数据/辅助工具

【对称加密,非对称加密】

两类加密算法

对称加密:无论是加密还是解密,都使用同一个密钥

非对称加密:有一对密钥A和B,使用A加密,就使用B解密,或者使用B加密,就使用A解密

大多时候一对密钥有一个密钥是公开的

公开出来的密钥,称为“公钥”,私藏起来的密钥,称为“私钥”

【https基本工作过程】

首先要注意,https只是在http的基础上引入加密机制,所以除了加密部分其他部分和http一模一样

如果中间的路由器被黑客入侵,此时黑客就可以通过路由器抓包明确地看到传输的数据是什么样子,一旦明确了数据,此时既可以知道数据要干什么,也可以篡改这里的数据

为了解决这样的问题,可以引入对称加密

但客户端和服务器交互过程中,一个服务器对应多个客户端,多个客户端是使用同一个还是不同的密钥?

必须不用,若大家密钥都相同,黑客只需要自己搞一个客户端,就也能知道密钥是什么

按照这样的方式,密钥明文传输给服务器,此时黑客就可能截获到这个密钥,后续的加密形同虚设,因此,通过对称加密,数据就是不安全的

为了让数据安全,可以引入非对称加密

通过非对称加密,对要传输的对称密钥进行加密,需要注意的是,非对称加密存在的目的不是为了取代对称加密,而是“辅助”

业务数据仍然是对称加密传输,而非对称加密只用来传输对称密钥

不取代是因为非对称加密的运算开销大,比较消耗性能,因此只用来加密运算开销小且很关键的对称密钥

【中间人攻击】

上述流程中存在严重缺陷

1.服务器会生成一对公钥私钥pub1和pri1,其中pub1是公开的,pri1自己保存好

2.客户端这边首先给服务器发起一个请求,问服务器公钥是什么,服务器收到了请求,就返回了“公钥是pub1”

3.此时中间的黑客就可以自机生成一对非对称密钥pub2和pri2,然后黑客就会把服务器返回给客户端的响应替换成“公钥是pub2”,变成黑客自己的公钥了

客户端是不清楚当前这个公钥是不是真的,只能选择相信

4.客户端使用pub2针对对称密钥加密,于是就把加密后的数据传输给服务器

5.中间的黑客劫持到上述数据,就可以利用对称密钥的特性,使用自己的pri2针对数据进行解密,得到了对称密钥的内容

随后黑客把拿到的对称密钥内容通过服务器的pub1重新加密,进行伪装,发送给服务器

服务器也不知道这个数据是不是做了手脚,因此服务器就认为和客户端已经把密钥交流完毕了,接下来应该传输数据了

6.接下来双方传输的数据就都能被黑客以对称密钥解密出来

因此,黑客的设备可以在客户端面前假扮服务器,在服务器面前假扮客户端,演技足够好就可以骗过双方,获取到双方传输的业务数据

如何避免中间人攻击?

引入证书机制

产生中间人攻击主要是因为客户端不知道服务器发过来的公钥是不是被伪造的,问题的关键是,能让客户端识别出拿到的公钥是不是正确合理的,不是伪造的公钥

如何证明公钥合理?

引入第三方公证机构

在公证机构这里申请「证书」(是电子的一串数据)

申请的时候就需要提交一些资料(网站域名,备案号等,以及最重要的公钥)

公证机构可以根据这些信息生成一个「证书」

服务器申请到证书后,后续客户端从服务器拿公钥,就不是只拿公钥,而是拿整个证书

此时,客户端就可以凭借证书中的数字签名对证书的合法性进行验证

【客户端验证数字签名流程】

1.客户端把证书中各个字段,再算一次校验和,得到checksum1

2.客户端使用公证机构的公钥,对数字签名进行解密,得到checksum2

3.对比checksum1和checksum2

若相等,视为当前证书各个字段和服务器这边的证书相同,就可以认为这是合法证书

若不相等,意味着证书上的内容被中间的黑客篡改,此时浏览器往往会弹出警告页面,提示用户该网站不安全

当前客户端手里拿着公证机构的公钥,客户端如何确定这个公证机构的公钥是正确的,不是伪造的?

这个东西不是通过网络获取的,而是操作系统内置的,因此不会是伪造的

黑客可不可以篡改数据后,同时更新数字签名,让数字签名解密出来的checksum2,和篡改过的checksum1一致?

理论不可行,黑客篡改数据后,要想重新生成数字签名,就要使用公证机构的私钥来加密,这个私钥不是普通黑客能拿到的

黑客如果自己生成一个私钥也没用,这个时候客户端拿着公证机构的公钥也解密不了(不是一对的密钥)

此时客户端如果解密出错,也可以认为证书有问题

Fiddler等抓包工具为什么能解析https数据

这类抓包工具只有拿到对称密钥,才能对数据解密

换句话说,这种工具就是在进行被允许的中间人攻击

(开启这类抓包工具的https选项时,同意了「信任抓包工具提供的证书」的选项,因此就是允许了)

1.此时客户端已经信任了fiddler证书,客户端手里就拿着了fiddler的公钥,fiddler就相当于客户端认可的公正机构

2.在客户端询问服务器证书的时候,对于服务器返回的证书,fiddler会篡改证书中的数据,把证书中的公钥替换为自己的公钥,并且使用自己的私钥来加密,得到数字签名,并重新生成证书替换服务器的证书,发给客户

3.客户端验证fiddler证书,计算证书各个属性的校验和,得到checksum1,并从数字签名解密,得到checksum2

这个数字签名就是拿着刚才信任的fiddler公钥进行解密了,这就达成了中间人攻击

这里与刚才的黑客攻击最大差别就是客户端验证fiddler证书的环节

因为对fiddler证书进行了信任,这就令客户端在后续把fiddler当成了公证机构,拿着它提供的公钥进行解密,自然也是没问题的

【重点掌握】

在浏览器输入url后,到最终展示出页面为止,这个过程中计算机都做了哪些事情呢?

基本思路:

站在网络原理的角度

a.DNS解析,我们输入的url里面一般都是一个域名,所以需要通过DNS服务器根据域名得到IP地址

b.https,接下来客户端要给服务器发送一个https请求,进入https的握手过程(对称加密,非对称加密,中间人攻击,证书等)

c.http,前面加密的准备工作完成了,接下来就要正式传输数据了,浏览器构造http请求,服务器返回http响应(http都有啥)

d.TCP,http基于TCP实现(TCP三次握手,核心机制等)

e.IP协议,TCP又是基于IP协议的(IP如何管理IP地址的,IP如何进行数据转发的?)

f.数据链路层(以太网知识)

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

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

相关文章

【每天学个新注解】Day 15 Lombok注解简解(十四)—@UtilityClass、@Helper

UtilityClass 生成工具类的注解 将一个类通过注解变成一个工具类,并没有什么用,本来代码中的工具类数量就极为有限,并不能达到减少重复代码的目的 1、如何使用 加在需要委托将其变为工具类的普通类上。 2、代码示例 例: Uti…

基于Java,SpringBoot,Vue智慧校园健康驿站体检论坛请假管理系统

摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#xf…

景区+商业,如何实现1+1>2?

景区商业,如何实现11>2? 近两年,随着旅游业的蓬勃发展,旅游热潮持续升温,游客的消费观念也在逐步升级。为了适应这一趋势,各大景区纷纷着手打造具有鲜明特色的文旅项目,希望能够吸引…

C++ | Leetcode C++题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution { public:bool circularArrayLoop(vector<int>& nums) {int n nums.size();auto next [&](int cur) {return ((cur nums[cur]) % n n) % n; // 保证返回值在 [0,n) 中};for (int i 0; i < n; i) {if …

cherry-markdown开源markdown组件详细使用教程

文章目录 前言开发定位目标调研技术方案前提工作量安排数据库表设计实现步骤1、引入依赖2、实现cherry-markdown的vue组件&#xff08;修改上传接口路径&#xff09;3、支持draw.io组件4、支持展示悬浮目录toc前端使用&#xff1a;编辑状态使用cherry-markdown的vue组件前端使用…

解决npm安装不了element库(目前未解决。。。)

根据您提供的错误信息&#xff0c;安装 element-plus 时出现了一些问题。这些错误主要可以分为两类&#xff1a;权限问题和网络问题。以下是一些解决这些问题的建议&#xff1a; 1. 解决权限问题 您遇到的 EPERM: operation not permitted 错误通常与文件系统权限有关。尝试以…

Stable Diffusion绘画 | 插件-Deforum:动态视频生成(中篇)

本篇文章重点讲解参数最多的 关键帧 模块。 「动画模式」选择「3D」&#xff1a; 下方「运动」Tab 会有一系列参数&#xff1a; 以下4个参数&#xff0c;只有「动画模式」选择「2D」才会生效&#xff0c;可忽略&#xff1a; 运动 平移 X 让镜头左右移动&#xff1a; 大于0&a…

卷积神经网络(CNN)的计算量和参数怎么准确估计?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 1. 卷积层&#xff08;Convolutional Layer&#xff09; a) 计算量估计&#xff1a; 卷积层的 FLOPs 2 * H_out * W_out * C_in * C_out * K_h * K_w 详细解释&#xff1a; H_out, W_out&#xff…

YOLO11改进|注意力机制篇|引入HAT超分辨率重建模块

目录 一、HAttention注意力机制1.1HAttention注意力介绍1.2HAT核心代码 二、添加HAT注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、HAttention注意力机制 1.1HAttention注意力介绍 HAT模型 通过结合卷积特征提取与多尺度注意…

推荐 uniapp 相对好用的海报生成插件

插件地址&#xff1a;自定义canvas样式海报 - DCloud 插件市场 兼容性也是不错的&#xff1a;

MySQL基础篇 - 事务

01 事务的简介 【1】什么是事务&#xff1a;事务是一组操作集合&#xff0c;要么同时操作成功&#xff0c;要么同时操作失败。 【2】对于MySQL数据库来说默认一条SQL语句就是一个事务&#xff0c;且事务是默认自动提交的。 我们可以把多条SQL语句设置成一个事务&#xff0c;使…

java:pdfbox 删除扫描版PDF中文本水印

官网下载 https://pdfbox.apache.org/download.html下载 pdfbox-app-3.0.3.jar cd D:\pdfbox 运行 java -jar pdfbox-app-3.0.3.jar java -jar pdfbox-app-3.0.3.jar Usage: pdfbox [COMMAND] [OPTIONS] Commands:debug Analyzes and inspects the internal structu…

Spring Boot技术栈:打造高效在线商城

2 相关技术 2.1 Springboot框架介绍 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring…

重学SpringBoot3-集成Redis(一)

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;一&#xff09; 1. 项目初始化2. 配置 Redis3. 配置 Redis 序列化4. 操作 Redis 工具类5. 编写 REST 控制器6. 测试 API7. 总结 随…

vSAN01:vSAN简介、安装、磁盘组、内部架构与调用关系

目录 传统的共享存储vSAN存储OSA的系统要求vSAN安装vSAN集群vSAN skyline healthvSAN与HA磁盘组混合磁盘架构全闪磁盘架构 vSAN对象vSAN内部架构 传统的共享存储 通过隔离的存储网络使得不同的ESXi主机访问独立的存储设备。需要前期投入较高的资金单独采购存储、网络可以单独规…

【Windows】自定义显示器的分辨率

背景 由于本人更新驱动导致2个显示器里面&#xff0c;有一个显示器的分辨率只剩下2个可以调节 这样就导致2个显示器分辨率不同&#xff0c;更新了多次驱动都修复不了&#xff0c;所以想着看能不能自定义分辨率 工具下载 显示器自定义分辨率工具 或者百度搜索 Custom Resolu…

STM32GPIO输入和输出

目录 一、先看IO端口位的结构 1、I/O输入&#xff1a; 2、I/O输出&#xff1a; 二、GPIO模式 三、枚举类型 四、GPIO输出点亮LED 五、LED流水灯 六、让蜂鸣器响起来 七、光敏传感器控制蜂鸣器 一、先看IO端口位的结构 上面部分是输入&#xff0c;下面是输出。 1、I/O输…

JAVA基础语法 Day11

一、Set集合 Set特点&#xff1a;无序&#xff08;添加数据的顺序和获取出的数据顺序不一致&#xff09;&#xff0c;不重复&#xff0c;无索引 public class demo1 {public static void main(String[] args) {//1.创建一个集合//HashSet特点&#xff1a;无序&#xff0c;不重…

【操作系统】体系结构

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 操作系统的内核 操作系统结构——分层结构 操作系统结构——模块化 操作系统结构——宏内核、微内核…

Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出

各个操作功能 部分功能 几种操作游戏物体的方式&#xff1a; Center:有游戏物体父子关系的时候&#xff0c;中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 &#xff1a;调试/暂停/下一帧 快捷键 1.Alt鼠标左键&#xff1a;可以实现巡游角度查看场景 2.鼠标滚轮…