网络基础 【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 非对称加密方案

        既然对称加密不是安全的,毕竟加密和解密都是用的同一个密钥,那我们使用非对称加密 密钥是两个 一个公钥 一个私钥

只有 服务器使用非对称加密

服务器 生成公钥和密钥 

公钥交给客户端

使用 公钥 和 私钥 进行加密与解密,也可以使用 私钥 和 公钥 进行加密与解密 

 我们先说使用 公钥 和 私钥 进行加密与解密的方案

利用这种方式 虽然客户端数据经过公钥 加密 变成密文,发给服务器,这个过程是安全的。毕竟只有服务器有私钥

但是的但是,服务器发过来的密文可是用私钥加密的,那么公钥就可以解密。而公钥又是公开的,所以中间人攻击一样也能拿到服务器响应的报文。

只有服务器使用非对称加密方案还是不安全 

那我们让 服务器和客户端都使用 非对称加密。

双方都使用 公钥加密 私钥解密

 这一样一看 感觉是无懈可击,安全的很。但是这样真的就是安全的吗?

如果中间人 攻击,自己也有 公钥 和 私钥 ?

这时我们 假设一下 客户端  和 服务器 交换公钥 ,这时 中间人攻击 劫持它们各自的公钥,中间人把 自己的公钥 给了服务器和客户端。

这时公钥被偷梁换柱了, 客户端和服务器双方浑然不知。

 

那么不管是服务器还是客户端,它们对明文利用公钥进行加密 ,用的都是中间人的公钥。所以双方的密文在中间人这里就明文。 然后中间人获取到信息后,在用它们各自的公钥加密发送给客户端和服务器双方。

 

抛开安全性不说,就双方都使用非对称加密,效率非常低下。

  1. 非对称加密算法强度高,加密与解密时间长
  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、假网站

 

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

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

相关文章

科普篇--- 什么是硬件在环测试?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

千万不要运行!几个可以整蛊你朋友的Python程序!

Python 能做很多无聊,但有意思的事情,例如接下来的一些案例。以下程序,不要发代码,要不实现不了你整蛊的目的。 要打包成一个 exe 程序,发给朋友才有意思,使用 pip install pyinstaller。 打包命令如下&a…

Redission · 可重入锁(Reentrant Lock)

前言 Redisson是一个强大的分布式Java对象和服务库,专为简化在分布式环境中的Java开发而设计。通过Redisson,开发人员可以轻松地在分布式系统中共享数据、实现分布式锁、创建分布式对象,并处理各种分布式场景的挑战。 Redisson的设计灵感来…

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种,性能如下所示: 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…

快速上手C语言【上】(非常详细!!!)

目录 1. 基本数据类型 2. 变量 2.1 定义格式 和 命名规范 2.2 格式化输入和输出(scanf 和 printf) ​编辑 2.3 作用域和生命周期 3. 常量 4. 字符串转义字符注释 5. 操作符 5.1 双目操作符 5.1.1 算数操作符 5.1.2 移位操作符 5.1.3 位操作符…

【C/C++】错题记录(四)

题目一 一个函数可以有很多个返回值(有很多个return语句),但是最终只能有一个return语句执行。 题目二 题目三 题目四 题目五 程序数据结构算法 题目六 题目七 题目八 题目九 D选项是语句……

Top4免费音频剪辑软件大比拼,2024年你选哪一款?

现在我们生活在一个数字化的时代,音频内容对我们来说很重要。不管是给自己拍的视频配背景音乐、整理开会时的录音,还是自己写歌,有个好用的音频剪辑软件都特别重要。今天,我要给大家介绍几款特别好用的音频剪辑软件免费的&#xf…

模型 SECI(知识的创造)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。知识创造的螺旋转化模型。 1 SECI的应用 1.1 Tech Innovations移动应用创新 Tech Innovations是一家软件开发公司,致力于开发创新的移动应用程序。为了提升团队的知识共享和创新能力&…

Unity3D 单例模式

Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式,能够保证一个类只有一个实例,提供访问实例的全局节点。 通常会把一些管理类设置成单例,例如 GameManager、UIManager 等,可以很方便地使用这些管理类单例,…

【Qt】Qt学习笔记(一):Qt界面初识

Qt 是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。Qt Creator是跨平台的Qt集成开发环境。 创建项目 Qt的一些界面,初学时一般选择Qt Widgets …

在线教育系统开发:SpringBoot框架的实战应用

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

Linux下静态库与动态库制作及分文件编程

Linux下静态库与动态库制作及分文件编程 文章目录 Linux下静态库与动态库制作及分文件编程1.分文件编程1.1优点1.2操作逻辑1.3示例 2.Linux库的概念3.静态库的制作与使用3.1优缺点3.2命名规则3.3制作步骤3.4开始享用 4.动态库的制作与使用4.1优缺点4.2动态库命名规则4.3制作步骤…

基于Vue的汽车维修配件综合管理系统设计与实现SpringBoot后端源码

目录 1. 系统背景 2. 系统目标 3. 功能模块 4. 技术选型 5. 关键技术点 6. 实现步骤 7. 项目意义 8. 后期展望 1. 系统背景 市场需求分析:随着汽车保有量的不断增加,汽车维修和保养的需求日益增长。车主对维修质量和配件质量的要求也越来越高。汽…

class 004 选择 冒泡 插入排序

我感觉这个真是没有什么好讲的, 这个是比较简单的, 感觉没有什么必要写一篇博客, 而且这个这么简单的排序问题肯定有人已经有写好的帖子了, 肯定写的比我好, 所以我推荐大家直接去看“左程云”老师的讲解就很好了, 一定是能看懂的, 要是用文字形式再写一遍, 反而有点画蛇添足了…

CANoe_TestModule截图功能TestReportAddWindowCapture

前言 TestReportAddWindowCapture方法作为CAPL脚本中的一个重要功能,其能够将指定窗口的屏幕截图添加到测试报告中,对于记录和验证界面状态具有重要意义。本文将全面解析TestReportAddWindowCapture方法的使用方法、参数解释、示例应用以及注意事项&…

中小企业做网站需要考虑哪些因素?

中小企业在建设网站时,需要考虑的因素有很多。以下是一些主要考虑因素的介绍: 明确建站目的:中小企业需要明确自己建立网站的目的。是为了展示企业形象、推广产品,还是提供客户服务?不同的目的将决定网站的设计和功能…

R语言的下载、安装及环境配置(RstudioVSCode)

0x01 R语言篇 一、软件介绍 R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。…

2.创建第一个MySQL存储过程(2/10)

引言 在现代数据库管理中,存储过程扮演着至关重要的角色。它们是一组为了执行特定任务而编写的SQL语句集合,这些语句被保存在数据库中,并且可以被多次调用执行。存储过程不仅可以提高数据库操作的效率,还能增强数据的安全性和一致…

2-113 基于matlab的图像的配准融合

基于matlab的图像的配准融合,采用互信息配准,PV差值,powell算法,小波变换的图像融合算法。在GUI界面输入两幅图像,完成图像的配准融合。融合图像要求像素 一样。程序代码已经有详细的注释。程序已调通,可直…

鸿蒙harmonyos next纯flutter开发环境搭建

公司app是用纯flutter开发的,目前支持android和iOS,后续估计也会支持鸿蒙harmonyos。目前谷歌flutter并没有支持咱们国产手机操作系统鸿蒙harmonyos,于是乎国内有个叫OpenHarmony-SIG的组织,去做了鸿蒙harmonyos适配flutter开发的…