网络基础 【HTTPS】
💓博主CSDN主页:麻辣韭菜💓
⏩专栏分类:Linux初窥门径⏪
🚚代码仓库:Linux代码练习🚚
💻操作环境: CentOS 7.6 华为云远程服务器
🌹关注我🫵带你学习更多Linux知识
🔝
目录
1. HTTPS
1.1 什么是加密?
1.2 为什么要加密?
2. 常见的加密方式
2.1 对称加密
2.2 非对称加密
2.3 数据摘要&&数据指纹
2.4 数字签名
3. 加密方案
3.1 对称加密方案
3.2 非对称加密方案
3.3 对称加密 + 非对称加密
4. 引入证书
4.1 CA证书
4.2 在加入CA证书的情况下遇到 MITM 攻击
4.2.1 情况一
4.2.2 情况二
4.2.3 情况三
4.2.4 情况四
最终方案
1. HTTPS
我们前面通过实验 在HTTP中不管是URL传输数据,还是通过正文方式,都是明文传输的。这就导致了中间人都能拿到报文,对报文进行修改。安全的问题非常明显。
基于这样背景 诞生了 HTTPS,HTTPS是在HTTP基础上引入一个加密层。
1.1 什么是加密?
在上面的网络协议栈示意图中,报文层层向下交付,到了传输层和网络层这里就有一个问题。 传输层和网络层属于OS,但是人家OS没有义务给你添加加密算法。下三层人家解决的是数据如何传输的问题。
所以我们的请求和响应 要想不被中间人 拿到,需要在应用层添加 加密解密层。
以前是直接发给OS ,现在有了加密解密层,HTTP的报文先发给加密解密层,然后加密解密层发给OS。给报文加密就变成了密文, 给密文解密 还原成明文。加密也是需要其他的数据来辅助的,而这部分辅助的数据叫做密钥。对于服务器来说也是一样!这就是HTTPS
那这个SSL 是程序员自己定制吗?
有公司专门来定制网络安全协议。但是话说,任何网络安全协议都是基于当下是安全的。
为什么这么说?
如果攻破的成本大于攻破收益,那么就是安全的。反之就是不安全 因为随着计算机硬件的发展 算力得到提升,攻破都是迟早得事。这个世界没有一劳永逸得事!
1.2 为什么要加密?
前面说过 不加密我们报文就是明文,中间人拿到报文做修改,就比如说 我们在浏览器中下载东西,最后安装完毕才发现不是自己要下载的软件。
以前是直接下载链接被篡改成其他软件的下载链接,现在是先下什么 最后才是你想要下的。
2. 常见的加密方式
2.1 对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,
特征:加密和解密所用的密钥是相同的。
常见对称加密算法
- AES(高级加密标准):目前最流行的对称加密算法,支持128、192和256位的密钥长度。
- DES(数据加密标准):较老的加密标准,已被AES取代,只有56位有效密钥长度,容易受到暴力破解攻击。
- 3DES:基于DES,使用三个56位的密钥,更加安全,但现在逐渐被AES取代。
- Blowfish:一种替代DES的加密算法,支持不同长度的密钥。
优点:
- 速度:对称加密算法比非对称加密算法要快很多,适合大量数据的加密。
- 资源效率:由于算法简单,计算成本低。
缺点:
- 密钥分发:必须安全地交换密钥,如果密钥泄露,通信的安全性会受到威胁。
- 密钥管理:随着参与通信的用户数量增加,密钥管理变得更加复杂。
2.2 非对称加密
需要两个密钥来进行加密和解密,这两个密钥是 公开密钥(简称公钥) 和 私有密钥 (简称私钥)。
常见非对称加密算法: RSA DSA ECDSA
特点:算法强度复杂,安全性依赖于算法于密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
公钥和私钥是配对的,最大的缺点就是运算速度慢。比对称加密要慢很多。
- 通过公钥对明文加密,变成密文
- 通过私钥对密文解密,变成明文
也可以反着用
- 通过私钥对明文加密,变成密文
- 通过公钥对密文解密,变成明文
2.3 数据摘要&&数据指纹
数字摘要 又称为 数字指纹,指通过哈希函数对信息进行运算后生成的一串定长字符串,具有很强的唯一性,数字摘要 并不能加密,而是用于快速判断原始内容是否被修改
摘要常见算法:MD5 SHA1 SHA256 SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
摘要的特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来数据对比。
2.4 数字签名
数字摘要经过加密 就得到了数字签名
3. 加密方案
当我们有了 对称加密、非对称加密、数据摘要、数字签名 相关概念 对HTTP协议进行升级
3.1 对称加密方案
密钥都是同一把 那么意味着 客户端的其他人当中间人,也是可以拿到报文的。就算客户端的人没有坏人,但是密钥本身就是明文的 中间人也是可以拿到密钥的。
这里关于密钥的产生有两种方案:
服务器生成,客户端生成。
如果是客户端生成 无疑是加大了服务器的负担,对每个客户的密钥要进行增删改查。
但是的但是 不管是哪一种方案 密钥 本身就是明文传输的。 有人说对密钥也进行加密,如果是这样就变成了 先有鸡还是先有蛋的问题了,一直死循环走不出来。
密钥 在传输过程中,有可能被 “劫持”
由此对称加密也不是安全的。
3.2 非对称加密方案
既然对称加密不是安全的,毕竟加密和解密都是用的同一个密钥,那我们使用非对称加密 密钥是两个 一个公钥 一个私钥
只有 服务器使用非对称加密
服务器 生成公钥和密钥
把公钥交给客户端
使用 公钥 和 私钥 进行加密与解密,也可以使用 私钥 和 公钥 进行加密与解密
我们先说使用 公钥 和 私钥 进行加密与解密的方案
利用这种方式 虽然客户端数据经过公钥 加密 变成密文,发给服务器,这个过程是安全的。毕竟只有服务器有私钥。
但是的但是,服务器发过来的密文可是用私钥加密的,那么公钥就可以解密。而公钥又是公开的,所以中间人攻击一样也能拿到服务器响应的报文。
只有服务器使用非对称加密方案还是不安全
那我们让 服务器和客户端都使用 非对称加密。
双方都使用 公钥加密 和 私钥解密。
这一样一看 感觉是无懈可击,安全的很。但是这样真的就是安全的吗?
如果中间人 攻击,自己也有 公钥 和 私钥 ?
这时我们 假设一下 客户端 和 服务器 交换公钥 ,这时 中间人攻击 劫持它们各自的公钥,中间人把 自己的公钥 给了服务器和客户端。
这时公钥被偷梁换柱了, 客户端和服务器双方浑然不知。
那么不管是服务器还是客户端,它们对明文利用公钥进行加密 ,用的都是中间人的公钥。所以双方的密文在中间人这里就明文。 然后中间人获取到信息后,在用它们各自的公钥加密发送给客户端和服务器双方。
抛开安全性不说,就双方都使用非对称加密,效率非常低下。
- 非对称加密算法强度高,加密与解密时间长
- 客户端与服务器都需要存储并管理彼此的公钥,非常麻烦
这种攻击方式常见吗?
非常常见,且容易上当,可能仅仅是连接一个公共环境下的免费WIFI,亦或是无名基站,个人信息就有可能会泄漏,无论是「对称式加密」、「非对称式加密」,还是后面的「非对称式加密」+「对称式加密」,都无法避免中间人攻击
3.3 对称加密 + 非对称加密
中间人攻击现在还无法解决,但可以解决使用非对称式加密时的效率问题
服务器先将 公钥 交给客户端
客户端使用 公钥 加密 密钥 后,交给服务器
因为此时 密钥 是使用服务器的 公钥 加密的,只能使用服务器的 私钥 解密,所以确保了 密钥 传输的安全性
后续直接使用 密钥 进行加密与解密
这种解决方案首先使用非对称式加密保证了 密钥传输时的安全性,确保只有客户端和服务器拥有 密钥,因为 密钥 加密与解密的特点就是 效率高,所以后续在传输数据时,整体效率就会高很多
然而这种方式也是不安全的
上面提出的几种解决方案都存在一个致命问题:客户端和服务器在进行第一次交流时,并不认识对方
这就导致无论是传递 公钥 还是传递 密钥,都无法确保最终到达对端手里的 钥匙 是正确的,也就给中间人制造了一个攻击的好机会
中间人劫持到服务器 公钥 后,将自己的 公钥 交给客户端
中间人通过自己的 私钥 成功解密了客户端的密文,获取了 密钥,然后使用服务器 公钥 重新加密后,将 密钥 交给服务器
宏观上来看,客户端和服务器获取了唯一的 密钥,但实际上中间人已经劫持到了 密钥,后面传输数据时,中间人可以轻易解密,获取信息
被攻击的核心原因:客户端无法验证公钥的合法性(客户端不认识服务器),此时就需要一个公平公正的第三方机构来进行认证,确保客户端所连接的服务器是合法的
4. 引入证书
4.1 CA证书
在今天,如果想使用 HTTPS
协议,服务器就需要向 CA
机构 申请一份 CA
证书,证书就如同该服务的身份证,其中包含了 证书申请者信息、公钥信息 等重要信息,服务器在成功申请到证书后,就会将证书交给客户端(也就是浏览器),以进行证书认证和获取 公钥
CA
证书 中有该证书的 数字签名,是由 CA
机构 使用自己的 私钥 进行加密而形成的密文,其他人都无法进行签名,至于 CA
机构 的 公钥,一般浏览器出厂就已经进行了内置
当客户端获取到服务器的 CA
证书 后,会使用 CA
机构 的 公钥 对 数字签名 进行解密,获取 数字摘要,同时使用相同的哈希算法,根据证书中的内容,计算出 数字摘要(散列值),与证书中的摘要进行对比,如果摘要一致,就证明证书是正常的,可以使用其中包含的 公钥,否则就证明证书已经被篡改过了,拒绝与网站进行连接(拒绝使用 “公钥”)
也就是说,之前单纯的传输服务器 公钥,变成了传输 CA
证书,这样是否防止中间人攻击呢?
4.2 在加入CA证书的情况下遇到 MITM 攻击
4.2.1 情况一
中间人在劫持到 CA
证书 后,什么都不做,转交给客户端
结果:没有丝毫影响,
CA
证书仍然是正常的,同时中间人也没有获取到任何信息
4.2.2 情况二
中间人在劫持到 CA
证书 之后,更改其中的 公钥 信息,改为自己的 公钥
结果:客户端根据
CA
证书 内容进行哈希计算后,得出的 数字摘要 与 CA
证书 自带的 数字摘要 并不相同,认为该证书失效,不使用
4.2.3 情况三
中间人认为情况二失败的关键在于 摘要不一致,于是中间人在修改 公钥 的同时,修改了 数字摘要,并自己生成了一份 数字签名
结果:客户端无法使用 CA
公钥 解密签名,因为这个签名非法
注意: 私钥加密,需要使用公钥解密,但 CA
机构 的私钥只有它们自己拥有
4.2.4 情况四
中间人气急败坏,既然假证书不行,那就直接向 CA
机构 申请一份证书,内容为自己的 公钥,即便它能申请到 CA
证书,客户端在读取证书内容后,也会立马将证书丢弃,因为证书中包含了服务器的信息,客户端能轻而易举的发现当前证书中的服务器与自己想访问的目标服务器信息不一致
结果:客户端识别出证书不是自己想要的,丢弃证书,拒绝连接
需要明白的是,证书申请比较麻烦,并且证书是有使用时限的,一旦过期,就需要重新申请,这就保证了合法的证书是可靠的,可以根据其中的内容判断是否丢弃
最终方案
在「非对称式加密」+「对称式加密」的基础上,引入「CA证书」,确保客户端获取到的是安全、可靠的 公钥,再使用该 公钥 加密 密钥,形成密文,该密文只能由服务器使用自己的 私钥 解密,获取 密钥,进行数据传输
只要公钥是安全可靠的,那么服务器在收到密文时,得到的密钥也是安全可靠的
客户端通过 CA
证书 获取到服务器的 公钥
使用 公钥 向服务器发送 密钥
双方使用 密钥 进行数据传输
有了「非对称式加密」+「对称式加密」+「CA证书」的解决方案,可以充分保证我们在上网冲浪时的安全性,这也就是为什么大多数钓鱼网站仍在使用
HTTP
协议,因为这样可以跳过整个安全检测方案
证书 扮演着重要角色,在访问那些 证书 过期,或者是没有 证书 的网站时需要提高警惕
如何成为中间人?
ARP
欺骗、ICMP
攻击、假 WIFI
、假网站
相关文章:

网络基础 【HTTPS】
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:Linux初窥门径⏪ 🚚代码仓库:Linux代码练习🚚 💻操作环境: CentOS 7.6 华为云远程服务器 🌹关注我🫵带你学习更多Linux知识…...

51单片机的红外感应洗手器【proteus仿真+程序+报告+原理图+演示视频】
1、主要功能 该系统由AT89C51/STC89C52单片机红外感应传感器继电器LED等模块构成。适用于智能红外感应自动洗手器等相似项目。 可实现功能: 1、红外感应传感器实时检测是否有人体接近(距离小于20cm) 2、如果有人靠近,继电器自动闭合&#…...

【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件
序言: 本文详细讲解了关于鸿蒙系统学习中的模块化语法与自定义组件,在模块化语法中我们学习到了多种导入导出方式,实现了在一个项目中,通过引用不同的组件,让我们整体代码的可读性更强,相当于我们把一个手…...

Angular 客户端渲染时,从 ng-state 里读取 SSR 状态的具体逻辑
Angular 在客户端启动时,如何检测页面中的 ng-state 标签并从中读取 JSON 对象,进而还原应用的状态,是服务器端渲染(SSR)与客户端渲染(CSR)无缝衔接的核心环节之一。为了理解这个过程࿰…...

C++的联合体union
联合体有点像class类型或者struct类型,只不过它一次只占用一个成员的内存。 通常我们有一个结构体,声明了4个浮点数,那么结构体中就有4*416字节。当我们不断向类或者结构体中添加成员时,其大小也会不断增大。 union只有一个成员…...

JavaScript 中的变量作用域
JavaScript 中的变量作用域 在 JavaScript 中,理解变量作用域是非常重要的,它决定了变量的可见性和生命周期。本文将深入探讨 JavaScript 中的变量作用域,帮助你更好地掌握这一关键概念。 一、什么是变量作用域? 变量作用域指的…...

【C++】二叉搜索树+变身 = 红黑树
🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…...

万界星空科技MES数据集成平台
制造执行系统MES作为连接企业上层ERP系统和现场控制系统的桥梁,承担了实时数据采集、处理、分析和传递的重要任务。MES数据集成平台是一个集成各类数据源,将数据进行整合和统一管理的系统,通过提供标准化接口和协议,实现数据的无缝…...

Ajax和axios简单用法
Ajax Ajax(Asynchronous JavaScript And XML,异步的JavaScript和XML)。 作用是: 数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在不重新加载整个页面的情况…...

Chillax2024.08.01 |免费的白噪音软件
支持多种声音叠加,单独调整音量,定时功能,完全免费。 大小:13.5M 百度网盘:https://pan.baidu.com/s/1dWpdYoO1bPCnHR1bXpTZEg?pwdolxt 夸克网盘:https://pan.quark.cn/s/89dc88c56e26 移动网盘ÿ…...

Python自动化办公:从Excel到PDF生成的全流程
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代办公环境中,数据处理和报表生成是日常工作中非常重要的一环。Python作为一门灵活且功能强大的编程语言,能够通过一系列开源库实现办公自动化。本文将详细讲解如何使用Python实现从Excel数据处理到生成PDF…...

allegro 不同页面相同网路的连接
一、cadence学习笔记(1)-原理图库制作 绘制好各个界面 放置OFFPAGE 绘制好单个界面是这个样子的,并将剩下的界面进行相同的操作 所有界面完成后,进入设计界面 右键design1.dsn选择Annotate… 点击OK后可以看到WiFi界面OFFPAGE旁边…...

医院管理新趋势:Spring Boot技术引领
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

Java 新手教程!面向对象设计一口气讲完![]~( ̄▽ ̄)~*(中)
目录 Java 内部类 Java面向对象的设计 - Java 内部类 什么是内部类? 例子 使用内部类的优点 访问局部变量的限制 内部类和继承 内部类中没有静态成员 生成的内部类的类文件 静态上下文中的内类 Java 内部类类型 Java面向对象设计 - Java内部类类型 成员内…...

驰骋低代码功能升级 - 实体功能权限控制
1. 权限控制升级概述 新增功能:对新建、保存、删除、归档、撤销归档等操作的按钮进行精细化的权限控制。展示位置:这些权限控制体现在查询页面和实体卡片页面的工具栏按钮上。 2. 权限控制方式 新建 0. 不控制:任何人都可以新建。1. 指定岗…...

Matlab|考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化
目录 1 主要内容 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现《考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化》,主要内容:“双碳”背景下,为提高能源利用率,优化设备的运行灵活性,进一步降低…...

Midjourney零基础学习
Midjourney学习笔记TOP01 什么是AI艺术 AI艺术指的是使用AI技术创作的艺术作品,包括AI诗歌、AI音乐、AI绘画等多种艺术表现形式;AI艺术可以被视为计算机程序与人类合作创作作品;除了Midjourney,比较流行的AI图像生成工具还有Stab…...

词嵌入(Word Embedding)之Word2Vec、GloVe、FastText
简介:个人学习分享,如有错误,欢迎批评指正。 词嵌入(Word Embedding)是一种将词语映射到低维稠密向量空间的技术,能够捕捉词与词之间的语义关系。Word2Vec、GloVe、FastText 是常见的词嵌入方法,…...

Vue82 路由器的两种工作模式 以及 node express 部署前端
笔记 对于一个url来说,什么是hash值?—— #及其后面的内容就是hash值。hash值不会包含在 HTTP 请求中,即:hash值不会带给服务器。hash模式: 地址中永远带着#号,不美观 。若以后将地址通过第三方手机app分享…...

[C#]使用纯opencvsharp部署yolov11-onnx图像分类模型
【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 使用纯OpenCvSharp部署YOLOv11-ONNX图像分类模型是一项复杂的任务,但可以通过以下步骤实现: 准备环境:首先,确保开发环境已安装OpenCvSharp和必…...

【机器学习-无监督学习】概率图模型
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…...

每日学习一个数据结构-AVL树
文章目录 概述一、定义与特性二、平衡因子三、基本操作四、旋转操作五、应用场景 Java代码实现 概述 AVL树是一种自平衡的二叉查找树,由两位俄罗斯数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明。想了解树的相关概念,请点击这里。以下是对AVL树的…...

课堂点名系统小程序的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,论坛信息管理,基础数据管理,课程信息管理,课程考勤管理,轮播图信息 微信端账号功能包括:系统首页,论坛信…...

使用Python查找WeChat和QQ的安装路径和文档路径
在日常工作和生活中,我们经常需要查找某些应用程序的安装位置或者它们存储文件的位置。特别是对于像WeChat(微信)和QQ这样的即时通讯软件,了解它们的文件存储位置可以帮助我们更好地管理我们的聊天记录和共享文件。今天࿰…...

【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
目录 🍔 编码器介绍 🍔 前馈全连接层 2.1 前馈全连接层 2.2 前馈全连接层的代码分析 2.3 前馈全连接层总结 🍔 规范化层 3.1 规范化层的作用 3.2 规范化层的代码实现 3.3 规范化层总结 🍔 子层连接结构 4.1 子层连接结…...

【数据结构】【栈】算法汇总
一、顺序栈的操作 1.准备工作 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{SElemType*base;SElemType*top;int stacksize; }SqStack; 2.栈的初始化 Status InitStack(SqStack &S){S.base(SElemType*)malloc(MAXSIZE*sizeof(SElemType));if(…...

如何训练自己的大模型,答案就在这里。
训练自己的AI大模型是一个复杂且资源密集型的任务,涉及多个详细步骤、数据集需求以及计算资源要求。以下是根据搜索结果提供的概述: 详细步骤 \1. 设定目标: - 首先需要明确模型的应用场景和目标,比如是进行分类、回归、生成文本…...

React18新特性
React 18新特性详解如下: 并发渲染(Concurrent Rendering): React 18引入了并发渲染特性,允许React在等待异步操作(如数据获取)时暂停和恢复渲染,从而提供更平滑的用户体验。 通过时…...

汽车发动机系统EMS详细解析
汽车发动机系统EMS,全称Engine-Management-System(发动机管理系统),是现代汽车电子控制技术的重要组成部分。以下是对汽车发动机系统EMS的详细解析,涵盖其定义、工作原理、主要组成、功能特点、技术发展以及市场应用等…...

【社保通-注册安全分析报告-滑动验证加载不正常导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...