HTTPS——HTTPS如何加密数据,“证书“为什么可以应对 “中间人攻击“

news2024/11/26 15:53:55

文章目录

  • 前言
  • 一、HTTPS是什么
  • 二、HTTPS加密方法
  • 三、HTTPS加密流程
    • 对称加密
    • 非对称加密
    • 中间人攻击
    • 证书
  • 总结


前言

本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话,互关一下,以后互相学习,共同进步。这篇文章能够帮助到你的话,劳请大家点赞转发支持一下!


一、HTTPS是什么

HTTPS 也是一个应用层协议, 是在 HTTP 协议的基础上引入了一个加密层。

HTTP 协议内容都是按照文本的方式明文传输的,所以一些别有用心的黑客等,就可以通过一些手段来截获HTTP请求,从而来窃取用户的隐私信息,甚至对内容进行篡改后,再进行发送至原目的地。

在互联网上, 明文传输是比较危险的事情!!!

HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全。


二、HTTPS加密方法

加密就是把 明文 (要传输的信息)进行一系列变换,生成 密文

解密就是把 密文 再进行一系列变换,还原成 明文

在这个加密和解密的过程中,往往需要 一个或者多个中间的数据 ,辅助进行这个过程,这样的数据称为 密钥

HTTPS的加密方法:
发送方通过密钥将明文转换成密文,进行发送,
接收方收到数据再通过密钥将密文转换成明文。


看似简单的过程,而这其中HTTPS为了保证信息的安全又与窃取篡改者进行了多次博弈,下面的加密流程揭示其中的博弈过程。


三、HTTPS加密流程

既然要保证数据安全, 就需要对数据进行 “加密”。

网络传输中不再直接传输明文了,而是加密之后的 “密文”。

你以为进行加密后,就能万事无忧了? 不正所谓道高一尺魔高一丈,黑客也在想尽办法破解。
世界上没有绝对的安全,只有当破解成本超过了数据本身的价值,那这些数据就安全了。正所谓亏本的买卖没人做。

加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密


对称加密

对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文。

在这里插入图片描述
此时就算黑客入侵路由器,截获了密文,他没有密钥解密,因此数据仍是安全的。

但是实际情况可不是这样的。

一个服务器会同时给N个客户端提供服务。 那么所有客户端都用同一个密钥进行加密吗? 在这里插入图片描述
如果这样,黑客直接注册一个客户端,就能拿到密钥,就可以窃取篡改所有客户端的信息。
所以是每个客户端都会自己生成一个密钥,然后再将密钥与通过这个密钥加密好的密文一起发送给服务器,服务器拿到密钥和密文,再通过这把密钥解密密文。
在这里插入图片描述
如果密钥进行明文传输的话,那前面的加密操作就没有意义了,因此密钥也需要加密。
且密钥的加密不能再使用对称加密了,因为这个密钥就是为了解决对称加密的安全问题。这里就使用非对称加密解决。


非对称加密

非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”。
有以下两种方法:

公钥进行加密操作,私钥进行解密操作。
私钥进行加密操作,公钥进行解密操作。

须知

1️⃣公钥与私钥一个用来加密,另一个用来解密,可以公钥加密,私钥解密;也可以私钥加密,公钥解密。
2️⃣一个钥匙进行加密,那么这个钥匙就无法将密文解密成明文举例:我用公钥对数据进行加密,此时这个密文使用公钥就解不出来,只有私钥可以正确解密。
形象来说就是,公钥与私钥,一个充当锁的角色,一个充当钥匙的角色。所以无法同时做到又能加密又能解密。

3️⃣公钥私钥就是两把 “钥匙” , 公布出去的叫做公钥,自己留下不告诉别人的叫做私钥
4️⃣公钥和私钥是配对的,最大的缺点就是运算速度非常慢,比对称加密要慢很多。

图解

共涉及到两个个密钥:
服务器的:公钥:pubKey;私钥:priKey


前提:服务器将公钥告诉所有客户端,自己保留私钥。
用来加密的钥匙:key
私钥:priKey(privateKey);公钥pubKey(publicKey)。

在这里插入图片描述

你以为这就安全了吗??
魔高一丈的攻击要来了!!!


中间人攻击

攻击来啦!

图解

共涉及到四个密钥:
服务器的:公钥:pubKey;私钥:priKey
黑客的:公钥:pubKey1;私钥:priKey1


1️⃣客户端先向服务器申请公钥,服务器发送(明文传输)公钥pubKey给客户端
2️⃣黑客截取到公钥,黑客记录这个pubKey,并自己生成了一对非对称密钥,pubKey1与priKey1。
3️⃣然后将pubKey1发送给客户端。

在这里插入图片描述

4️⃣ 客户端拿到公钥,但是他并不知道这个公钥被篡改了,因此仍然使用pubKey1对key进行加密,并发送。
5️⃣此时黑客再次截取客户端发送的数据,使用priKey1将key解密出来,然后再用key将密文解密得到数据。
6️⃣然后再将数据篡改后,用key加密,再用之前记录的pubKey对key加密,然后再发送给服务器。

在这里插入图片描述

上述的中间人攻击,就对数据神不知鬼不觉的完成了截取篡改。

那么HTTPS为了应对中间人攻击,就实施了 “证书” 这一方案


证书

如何破解 “中间人攻击” 呢?

"中间人攻击"的原理
中间人攻击主要就是通过截获服务器发送给客户端的公钥,然后将自己生成的公钥以相同的数据格式发送给客户端,让客户端以为自己拿到了服务器的公钥。

所以破解"中间人攻击"的关键就是服务器的公钥可以安全送达。
而 “证书” 就可以让客户端验证服务器传输过来的公钥有没有被篡改。

证书是什么

证书可以理解成是一个Java中的对象,这个对象中包含许多信息(成员变量)以字符串的形式呈现。

证书包含的信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名:签名就是通过算法将整个证书计算出的一个哈希值。可以把签名理解为一个校验和
  • …等等信息

搭建一个 HTTPS 网站要在相关权威机构先申请一个证书,要向权威机构提供一些资料(包括服务器要发送给客户端的公钥),申请下来的 证书的信息中就包括公钥 ,证书中有一个最关键的核心信息: 签名

这个 签名由权威机构先针对证书计算出一个值,然后权威机构再用自己的私钥对这个签名进行加密
电脑操作系统内置了 与权威机构私钥成对的公钥

此时服务器就不会向客户端发送公钥,而是将整个证书发送给客户端。
而证书仍然采用明文传输,其中只有签名这个属性进行了加密!

图解

共涉及到四个密钥:
服务器的:公钥:pubKey;私钥:priKey
黑客的:公钥:pubKey1;私钥:priKey1

在这里插入图片描述
在这里插入图片描述
如果黑客自己 伪造一个证书发给客户端 或者 用系统内置的公钥解密并篡改了签名 ,但是黑客没有权威机构的私钥,无法对签名进行加密,那么系统内置的公钥就无法正确解密签名,就更不会信任这个证书了。

当然,客户端拿到证书后不止是会对签名进行校验。
当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的,或被篡改过)

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1,然后计算整个证书的 hash 值,设为 hash2, 对比 hash1 和 hash2 是否相等,如果相等,则说明证书是没有被篡改过的

此时就保证了数据的安全!
黑客将证书中的公钥替换成自己的,客户端可以识别,直接报错,就不会再向外发送数据。
如果黑客不替换,那么他也无法解密出数据,更别说篡改数据了。

证书的目的就是为了保护服务器的公钥可以安全送达客户端,而不被篡改。


以上的 “对称加密”,“非对称加密”,“证书”,都是SSL协议中的内容。
而HTTPS协议 = HTTP协议 + SSL协议。

总结

以上就是今天要讲的内容,本文介绍了HTTPS的是如何保证数据安全传输,以及如何应对中间人攻击!

路漫漫不止修身,也养性。

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

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

相关文章

Linux笔记——管道相关命令以及shell编程

文章目录 管道相关命令 目标 准备工作 1 cut 1.1 目标 1.2 路径 1.3 实现 2 sort 2.1 目标 2.2 路径 2.3 实现 第一步: 对字符串排序 第二步:去重排序 第三步: 对数值排序 默认按照字符串排序 升序 -n 倒序 -r 第四步: 对成绩排序【按照列排序】 …

python实现逻辑回归-清风数学建模-二分类水果数据

所用数据 👉👉👉二分类水果数据 1.数据预处理 可以看到有4个特征,2种分类结果,最后4个没有分类结果的数据是拿来预测的 # 1. 数据预处理 import pandas as pd df pd.read_excel(oridata/二分类水果数据.xlsx,use…

启用window10专业版系统自带的远程桌面

启用window10专业版系统自带的远程桌面 Windows操作系统作为应用最广泛的个人电脑操作系统,在我们身边几乎随处可见。虽然近些年因手机、平板电脑等设备的兴起,个人电脑的存在感逐渐降低,但对于一些大型程序和特殊情况(办公软件、…

超细Python性能测试实战,Locust框架性能测试(详全)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 当涉及到评估应用…

《零基础入门学习Python》第062讲:论一只爬虫的自我修养10:安装Scrapy

这节课我们来谈谈 Scrapy 说到Python爬虫,大牛们都会不约而同地提起Scrapy。因为Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 Scrapy最初是为了页面抓…

【微信小程序】使用iView组件库中的icons资源

要在微信小程序中使用iView组件库中的icons资源,需要先下载并引入iView组件库,并按照iView的文档进行配置和使用。 以下是一般的使用步骤: 下载iView组件库的源码或使用npm安装iView。 在小程序项目的app.json文件中添加iView组件库的引入配…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验,单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…

qs库的使用

前言 qs是一个流行的查询参数序列化和解析库。可以将一个普通的object序列化成一个查询字符串,或者反过来可以将一个查询字符串解析成一个object,而且支持复杂的嵌套。在工作中,最经常使用qs的地方就是请求参数格式转换的时候,但是…

QT通过TCP协议发送结构体数据

文章目录 前言1. memcpy方式1.1 发送整个结构体1.2 发送部分数据 2. QDataStream2.1 符号<<2.2 wrieteRawData 总结 前言 做上位机的时候下发数据&#xff0c;数据是一个结构体&#xff0c;这里就阐述一下怎么通过TCP协议发送结构体。 我自己写的时候主要通过两种方式&a…

K8S初级入门系列之五-Pod的高级特性

一、前言 前一篇我们了解了Pod的基本概念和操作&#xff0c;本篇我们继续研究Pod的一些高级特性&#xff0c;包括Pod的生命周期&#xff0c;pod探针&#xff0c;pod的调度等。 二、生命周期 1、Pod的生命周期 Pod的生命周期示意图如下&#xff1a; 挂起(Pending)&#xff0c…

webpack配置externals汇总

webpack5.88.1 vue2.7.14 vue-router3.6.5 element-ui2.15.13 ant-design-vue1.7.8 externals用于提取第三方依赖包&#xff0c;使用cdn资源的方式将第三方依赖包引入项目&#xff0c;可以大大减少项目打包体积 配置externals对象有技巧&#xff1a; key 就是 import aaa from …

No3: 学习过程中故障成长积累

文章目录 故障积累1、编码错误导致 故障积累1、编码错误导致

JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

一、版本roadmap图 官方地址&#xff1a; https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出&#xff0c;JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看&#xff0c;JDK8到2023年已经有将近10年的历史了&#…

C++笔记之使用STL的function实现回调机制

C笔记之使用STL的function实现回调机制 code review! 文章目录 C笔记之使用STL的function实现回调机制1.使用普通函数2.使用匿名函数&#xff08;Lambda表达式&#xff09;3.使用函数对象&#xff08;functor&#xff09;4.运行输出 1.使用普通函数 代码 #include <funct…

【C++杂货铺】运算符重载

目录 前言一、运算符重载二、赋值运算符重载三、完善日期类3.1 重载关系运算符3.2 重载、3.3 重载-、-3.4 重载、--3.5 重载<<、>> 四、const成员五、取地址及const取地址操作符重载 前言 本文将以日期类为基础&#xff0c;去探寻运算符重载的特性与使用方法&…

小程序如何删除/修改/上下架分类

删除、修改或上下架小程序中的分类可以帮助商家更好地管理和调整分类展示。下面将介绍如何在小程序中删除、修改或上下架分类的操作步骤。 在小程序管理员后台->分类管理&#xff0c;可以看到处于上架和下架状态的分类。 删除&#xff1a;点击分类上的删除按钮&#xff0c;…

vscode使用g++编译.c文件或.cpp文件

vscode是一个跨平台、轻量级、插件非常丰厚的IDE&#xff0c;这里介绍在vscode里使用g来编译.cpp文件。g也叫GCC, 在Window中&#xff0c;是使用MinGW方式实现g的&#xff0c;它分为32位和64位2个版本&#xff0c;其中&#xff0c;MinGW-64是64位的&#xff0c;MinGW-32是32位的…

qt MainWindow设置layout失效

错误的做法&#xff1a;直接把layout设置到MainWindow上 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QVBoxLayout *mainLayout new QVBoxLayout();QPushButton *btn1 new QPushButton("aa", t…

VRIO模型

VRIO模型 由美国学者Jay B.Barney 1991年在《企业资源和持续竞争优势》中提出的&#xff0c;是一个战略规划工具&#xff0c;一般用于评估和分析企业的内部资源&#xff0c;并利用这些资源获得持续的竞争力。 模型介绍 该模型指出了有四个因素对持久的竞争优势产生了影响&…

【技术面试】Java八股文业余选手-上篇(持续更新)

文章目录 1. Java 基础【√】1.1 数据结构&#xff1a;集合 Set Map List Array Tree【√】1.2 基础算法&#xff1a;排序算法、二分算法、银行家算法、最短路径算法、最少使用算法、一致性哈希算法【√】1.3 Thread【】1.4 代理、反射、流操作、Netty【√】1.5 JVM 原理【√】…