浅谈HTTP 和 HTTPS (中间人问题)

前言

由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的改进

开门见山:

HTTPS 是对 HTTP 的加强版

主要是对一些关键信息 进行了加密

一.两种加密方式

1.对称加密

公钥 + 明文 = 密文

密文 + 公钥 = 明文

2.非对称加密

举个例子就好比 小区邮箱

提供一把锁(公钥,是给邮递员的) ,和一把钥匙(私钥,自己吃有)

邮递员把你的信,通过这把锁,锁到你的信箱里(使用公钥加密)

然后你就可以拿着你的钥匙打开邮箱(使用私钥解密)

前提是 锁 和 钥匙 是配对的(也就是公钥和私钥是配对的)

二.HTTPS的工作过程

总的目标:针对HTTP 这里的 header 和 body 进行加密

1.对称加密

但是上图有个很明显的问题,客服务器如果给很多的客户端发对接,那么这些客户端拿的是同一个 密匙 吗?

很明显,必须要求这些客户端的密匙是不一样的,这样彼此才不知道对方的密匙是什么

那么此时就要求每个客户端的密钥都不同,就需要每个客户端在和服务器进行连接的时候,把自己的密钥生成出来,客户端再通过网络发送给服务器

但是如果黑客把密钥进行了抓取,那么加密操作就形同虚设

那么如何进行解决呢,如果给密钥套上一层密钥可以吗?答案按是不行的,套多少次都会被截取。

2.非对称加密

跟前面说的一样 , 使用公钥和私钥,也就是对称密钥!!

就是客户端和服务器都生成自己的公钥和私钥

1.客户端给服务器发送一条请求,专门要服务器的公钥

2.服务器把私钥藏好,把公钥给客户端(公钥可能被劫持), 客户端使用公钥进行加密,再进行传输的时候,即使被黑客进行劫持,但是只有私钥才能解密,而私钥在服务器哪里!

3.服务器手里持有私钥,服务器可以对对称密钥进行解密,然后就可以得到了原始的对称密钥。

这里有个问题:既然已经引入了非对称加密,那么为什么还要引入对称加密呢?

 答案就是:效率。每个业务逻辑要求的是不一样的,引入非对称加密势必会影响到整体的性能,                         也就是在合适的场景下使用非对称加密。对称加密也有他自己的用武之地。

3.中间人问题

非对称加密其实还有一个比较隐蔽的问题,那就是中间人问题

总的来说就是

  1. 黑客 把pub1 进行获取 , 然后使用 自己的 pub 2 发给客户端,
  2. 客户端信以为真,使用 pub2 进行加密转给了黑客,黑客使用 自己的 pri2 进行解密之后 , 拿到了关键的对称密钥。
  3. 还不算完,为了不让服务器发现,黑客还把这个对称密钥使用之前获取的 pub1 加密,发给了服务器。
  4. 服务器以为是客户端发来的,那么就使用了pri 2 进行解密,得到了对称密钥。
  5. 此时,三者都有了对称密钥,那么客户端和服务器之间的通信,就非常危险了!

🎈那么如何进行解决呢?

                                        ---------->答案就是引入公证机构

服务器再创建的时候,需要先向公证机构进行申请。公证机构根据服务器的一些属性颁发 证书,证书中包含 网站域名,服务器公钥,过期时间,数字签名(被加密后的校验和)等。服务器就会保存好这个证书。

数字签名就是公证机构针对证书中的各个属性,计算出一个校验和,然后使用自己的私钥进行加密。

公证机构会生成自己的公钥和密钥。公钥通过操作系统分发给各个服务器,私钥自己进行保存。

当两者再次进行通信的时候,客户端收到服务器的证书,然后使用内置的公钥进行解密出数字签名,如果发现一致,那么就意味着服务器的证书是公证机构颁发的,是可信的! 因为服务器的数字签名是通过公证机构的对称密钥进行加密的。


总的来说:

https进行加密:

  1. 对称加密,加密业务数据
  2. 非对称加密,加密对称密钥
  3. “中间人”攻击,发现问题!
  4. 使用证书,校验服务器的公钥

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

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

相关文章

Python学习笔记-Flask实现简单的投票程序

1.导入flask包 from flask import Flask,jsonify,abort,make_response,request,render_template 2.初始化 Flask 应用: app Flask(__name__) 3. 定义投票种类 data [{id:0,name:劳动节,num:0},{id:1,name:国庆节,num:0},{id:2,name:春节,num:0} ] 4.app.route(/index): …

2024考研计算机考研复试-每日重点(第二十期)

公众号“准研计算机复试”,超全大佬复试资料,保姆级复试,80%的题目都是上岸大佬提供的。 研宝们,App更新啦! 计算机组成原理: 10.☆什么是数据存储的大端模式和小端模式? 大端模式:数…

github拉取项目找不到前端代码

今天从github上拉取了一个项目,使用docker部署在了服务器上, 代码正常运行,但是想在下载的项目中找前端代码遇到了问题,项目结构中的template模板只有一个页面,于是查看nginx配置文件 查看index.html 引入了一些js文件…

EasyRecovery恢复电脑丢失数据怎么样?

电脑是我们大家熟悉并且常用的数据存储设备,也是综合性非常强的数据处理设备。对于电脑设备来讲,最主要的数据存储介质是硬盘,电脑硬盘被划分成多个分区,在电脑上表现为C盘,E盘等,用来保存系统文件以及其他…

easyrecovery破解版百度云(含Mac/Win版)以及EasyRecovery可以恢复哪些设备

软件介绍 当不小心将回收站的文件删除了怎么办?想找回但是不知道怎么找回需要的数据文件?别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具,easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&…

IT廉连看——Uniapp——模板语法

IT廉连看——Uniapp——模板语法 众所周知,Uniapp是使用vue.js框架开发出来的,所以说它可以使用vue中的语法和指令来开发我们的项目。如果没有学习过vue的话开发起来会比较吃力,所以这节课就带大家学习几个常用的vue知识。如果有学习过vue&a…

【编码魔法师系列_结构型5】外观模式(Facade Pattern)

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通…

改三行代码就发了SCI一区?基于全面学习策略的Jaya算法!学会你也可以!CEC2017效果极佳!

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 原始Jaya算法 改进Jaya算法策略详解&…

基于Verilog的简易CPU设计

前言 本篇文章将简单讲解CPU之间各部分的功能及接线,并提供Verilog模拟CPU的各个组成部分。该CPU可以完成一些操作,如:加减法,与或,指令跳转等,最后提供testbench用于测试该CPU的工作情况是否符合预期。 C…

keycloak18.0.0==前后端分离项目中使用,前端react后端springboot

配置keycloak 启动keycloak18 新建一个realm,名字叫test1 新建两个client,一个用于前端,一个用于后端 第一个 react http://localhost:8081/auth/realms/test1/react/ 第二个 backend-service 在两个client下分别创建role testRole backend-servic…

CF575H Bots 题解 组合数学

Bots(波特) 传送门 Sasha and Ira are two best friends. But they aren’t just friends, they are software engineers and experts in artificial intelligence. They are developing an algorithm for two bots playing a two-player game. The ga…

生产企业如何发现瓶颈工序并解决它

众所周知,瓶颈工序决定整体产能,产能均衡是高效生产的重要保证,在100个工序中,只要存在一个工序效率低下,那么99个工序的努力都无法解决整体产能落后的问题。 如何解决瓶颈工序产能不足问题,进而提高工厂整…

k8s部署InfluxDB

(作者:陈玓玏) 1. 拉取镜像 docker pull influxdb #拉取镜像 docker run -d influxdb:latest #后台运行容器 docker exec -it 89b /bin/bash #进入容器,89b是容器ID的前三位 cd /usr/bin #进入容器后,进入此文件夹…

【WPS】压缩图片

第一步: 点击插入,点击图片 第二步: 点击图片工具,点击压缩图片 第三步:

Git 遇到合并冲突如何解决

Git 遇到合并冲突解决方法 前言一、解决冲突 回滚二、将解冲突后的文件 提交到暂存区三、git commit 提交代码到本地Git仓库四、git push 提交五、注意 ​ 2024/3/13 前言 Git突然无法拉取下来,显示有合并冲突: 步骤:解决回滚解决冲突后、添…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 输入:head [1,2,3,4] 输出:[2…

[HackMyVm] Vinulizer

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

CCCorelib 点云ICP配准(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 ICP算法总共分为6个阶段,如下图所示: (1)挑选发生重叠的点云子集,这一步如果原始点云数据量比较巨大,一般会对原始点云进行下采样操作。 (2)匹配特征点。通常是距离最近的两个点,当然这需要视评判的准则而…

mysql不能远程连接的解决办法

问题: 安装完mysql之后,在本机可以正常使用,但是通过其它电脑不能远程连接. 解决方案: 在安装mysql的电脑上,登录mysql, 执行权限 GRANT ALL PRIVILEGES ON *.* TO root"%" IDENTIFIED BY "password"; 刷新权限 flush privileges;

C++(3/13)

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std; cla…
最新文章