网络基础「HTTPS」

✨个人主页: 北 海
🎉所属专栏: Linux学习之旅
🎃操作环境: CentOS 7.6 腾讯云远程服务器

成就一亿技术人


文章目录

  • 1.基本概念
    • 1.1.HTTP协议面临的问题
    • 1.2.加密与解密
    • 1.3.数字摘要
    • 1.4.数字签名
  • 2.解决方案
    • 2.1.「对称式加密」
    • 2.2.「非对称式加密」
    • 2.3.「非对称式加密」+「对称式加密」
    • 2.4.存在的安全问题
  • 3.引入证书
    • 3.1.CA证书
    • 3.2.在加入CA证书的情况下遇到 MITM 攻击
      • 3.2.1.情况一
      • 3.2.2.情况二
      • 3.2.3.情况三
      • 3.2.4.情况四
    • 最终方案
    • 3.3.「非对称式加密」+「对称式加密」+「CA证书」
    • 3.4.补充


1.基本概念

1.1.HTTP协议面临的问题

在使用 HTTP 协议传递参数时,无论是 GET 方法,还是 POST 方法,都是不安全的,可以使用抓包工具抓取到敏感信息

这也就意味着在涉及敏感信息时, HTTP 协议不可取,需要使用一个更加安全的协议,于是基于 SSL/TLS 加密协议的 HTTPS 协议就诞生了

SSL/TLS 是用于加密和保护网络通信的协议。它们用于确保在互联网上传输的数据在传输过程中是安全的,并且不能被未经授权的人读取或篡改。SSLTLS 的前身,TLS 实际上是 SSL 的后续版本

1.2.加密与解密

首先需要简单了解一下 加密与解密 的概念

  • 加密把明文经过一系列变换,形成密文
  • 解密把密文经过一系列变换,还原成明文

明文就是我们能看懂的信息,比如这篇博客现在就是以明文的形式显示的,但如果我将其变为火星文,所有人都看不懂,那它就变成密文了

加密解密的过程中需要一个或者多个辅助数据,我们将其称为 「密钥」

加密是上锁,解密就是开锁,无论是上锁还是解锁,都需要钥匙,也就是「密钥」

常见的加密方式有以下两种:

  1. 对称式加密:采用单密码系统的加密方法
    • 特点:算法公开、计算量小、加密速度快、加密效率高
  2. 非对称式加密:需要使用两个密码,分别是公开密钥(公钥)和私有密钥(私钥),用公钥加密,只能用私钥解密,用私钥加密,只能用公钥解密
    • 特点:算法强度复杂、安全性依赖于算法与密钥、加密和解密的速度比较慢

注意: 使用公钥加密,只能使用私钥解密;使用私钥加密,只能使用公钥解密


为什么需要加密?
首先是因为信息都是以 明文 的形式传输的,难免会遇到坏人收集个人信息,其次是可能存在运营商劫持等安全问题,个人信息容易泄漏,所以才需要对信息加密,保护隐私

关于解密
在计算机领域存在一位大神:艾伦·麦席森·图灵,不仅精通计算机,还精通密码学,他在二战期间破译了德军的密码系统,加速了二战胜利的进程,后来人们为了纪念他,以他的名字命名了计算机领域的最高奖项:「图灵奖」

1.3.数字摘要

数字摘要 又称为 数字指纹,指通过哈希函数对信息进行运算后生成的一串定长字符串,具有很强的唯一性,数字摘要 并不能加密,而是用于快速判断原始内容是否被修改

这种技术还可以用于网盘存储中,比如xxx网盘中就有一个 “秒传功能”,可以快速上传目标文件,其实就是根据用户上传的文件生成了 数字摘要,将该摘要与服务器中已经记录好的摘要信息进行对比,如果发现该摘要,就证明服务器中已经存在这个文件了,无需再重复上传,只需要在用户的上传目录中建立目标文件的软链接或者硬链接,就可以实现 “秒传”

1.4.数字签名

数字签名 是指将 数字摘要 通过加密后得到的字符串,计算过程需要借助 密钥

为什么不直接对原始内容进行加密后得到 数字签名
因为在经过哈希函数后,会得到一串定长且唯一的字符串,更适合进行加密计算

现在已经有了 加密与解密、加密方式、数字摘要、数字签名 的相关概念了,可以对 HTTP 协议进行升级了


2.解决方案

2.1.「对称式加密」

对称加密是指双方使用同一个 密钥,对原始内容进行 加密和解密

使用 密钥 进行加密与解密

对称式加密的优点是:算法公开、计算效率高,现在问题在于如何让客户端与服务器持有同一个 密钥

  • 方案A:服务器生成密钥后传递给客户端
  • 方案B:客户端生成密钥后传递给服务器

首先说说方案A,如果存在很多个客户端,那么它们使用的密钥就都是一样的,可以相互解密,倘若这些客户端中存在坏人,那整个加密方式都会失效;其次是传递密钥时是 明文传输,即便客户端中没有坏人,也可能遭到中间人劫持,泄漏密钥

其次是方案B,如果存在很多客户端,每个客户端都给服务器传递一个密钥,意味着服务器要对【客户端,密钥】这组关系进行维护,虽然此时每个客户端都有自己的密码,在一定程度上保证了加密的唯一性,但对关系的维护无疑会增加服务器的负担;同样必须通过 明文传输,中间人劫持也是无法避免的

客户端将 密钥 交给服务器

密钥 在传输过程中,有可能被 “劫持”

在只使用「对称式加密」的情况下,存在很大的安全漏洞,可以说这种方法在实际中几乎无法使用

2.2.「非对称式加密」

非对称式加密指存在一个 公钥 和 一个 私钥公钥加密,只能使用私钥解密;私钥加密,只能使用公钥解密

首先来看看只有服务器使用非对称式加密的情况

服务器将 公钥 交给客户端

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

此时服务器中存在 公钥私钥,凡是与服务器进行连接的客户端,都可以得到服务器的 公钥,因为此时只有服务器使用非对称式加密,所以后续无论有多少客户端连接,服务器都只需要使用自己的 公钥私钥私钥只有服务器自己持有

服务器在传递 公钥 时,仍然是使用 明文传输,坏人仍然能获取 公钥,当客户端使用 公钥 加密原始内容后,只有服务器能解密,因为 使用公钥加密,只能使用私钥解密,数据传输安全,但如果是服务器使用 私钥 加密原始内容后,凡是持有 公钥 的客户端都能进行解密,这是比较危险的


再来看看客户端、服务器都使用非对称式加密的情况

服务器与客户端交换 公钥

在交换公钥之后,无论是客户端还是服务器,在进行加密时,都是使用对方的 公钥 进行加密,确保只有对方的 私钥 能进行解密,这种方法确保了 加密与解密 的唯一性,能有效的确保安全,但这样做面临着很严重的效率问题:

  1. 非对称加密算法强度高,加密与解密时间长
  2. 客户端与服务器都需要存储并管理彼此的公钥,非常麻烦

这样做就一定安全吗?当然不是,中间人攻击了解一下

中间人有自己的 公钥私钥,当客户端与服务器交换 公钥 时,中间人劫持它们的 公钥,并将自己的 公钥 交给它们,让它们误以为已经完成了交换;后续在进行加密时,无论是客户端还是服务器,都是在使用中间人的 公钥 进行加密,当密文来到中间人手里时,中间人可以使用自己的 私钥 解密,获取到信息后,再使用 客户端/服务器 的 公钥 进行加密,重新发送给它们

如此一来,客户端和服务器以为自己的密文是不可能被他人破解的,但实际上密文已经被偷梁换柱了

下面开始表演 “偷梁换柱”

这种攻击方式常见吗?
非常常见,且容易上当,可能仅仅是连接一个公共环境下的免费WIFI,亦或是无名基站,个人信息就有可能会泄漏,无论是「对称式加密」、「非对称式加密」,还是后面的「非对称式加密」+「对称式加密」,都无法避免中间人攻击

2.3.「非对称式加密」+「对称式加密」

中间人攻击现在还无法解决,但可以解决使用非对称式加密时的效率问题

首先服务器使用非对称式加密,将公钥交给客户端,然后客户端使用公钥加密,传输密钥,后续在传递信息时,使用密钥进行加密与解密

服务器先将 公钥 交给客户端

客户端使用 公钥 加密 密钥 后,交给服务器

因为此时 密钥 是使用服务器的 公钥 加密的,只能使用服务器的 私钥 解密,所以确保了 密钥 传输的安全性

后续直接使用 密钥 进行加密与解密

这种解决方案首先使用非对称式加密保证了 密钥传输时的安全性,确保只有客户端和服务器拥有 密钥,因为 密钥 加密与解密的特点就是 效率高,所以后续在传输数据时,整体效率就会高很多

然而这种方式也是不安全的

2.4.存在的安全问题

上面提出的几种解决方案都存在一个致命问题:客户端和服务器在进行第一次交流时,并不认识对方

这就导致无论是传递 公钥 还是传递 密钥,都无法确保最终到达对端手里的 钥匙 是正确的,也就给中间人制造了一个攻击的好机会

中间人劫持到服务器 公钥 后,将自己的 公钥 交给客户端

中间人通过自己的 私钥 成功解密了客户端的密文,获取了 密钥,然后使用服务器 公钥 重新加密后,将 密钥 交给服务器

宏观上来看,客户端和服务器获取了唯一的 密钥,但实际上中间人已经劫持到了 密钥,后面传输数据时,中间人可以轻易解密,获取信息

被攻击的核心原因:客户端无法验证公钥的合法性(客户端不认识服务器),此时就需要一个公平公正的第三方机构来进行认证,确保客户端所连接的服务器是合法的


3.引入证书

3.1.CA证书

在今天,如果想使用 HTTPS 协议,服务器就需要向 CA机构 申请一份 CA证书,证书就如同该服务的身份证,其中包含了 证书申请者信息、公钥信息 等重要信息,服务器在成功申请到证书后,就会将证书交给客户端(也就是浏览器),以进行证书认证和获取 公钥

CA证书 中有该证书的 数字签名,是由 CA机构 使用自己的 私钥 进行加密而形成的密文,其他人都无法进行签名,至于 CA机构公钥,一般浏览器出厂就已经进行了内置

当客户端获取到服务器的 CA证书 后,会使用 CA机构公钥数字签名 进行解密,获取 数字摘要,同时使用相同的哈希算法,根据证书中的内容,计算出 数字摘要(散列值),与证书中的摘要进行对比,如果摘要一致,就证明证书是正常的,可以使用其中包含的 公钥,否则就证明证书已经被篡改过了,拒绝与网站进行连接(拒绝使用 “公钥”

也就是说,之前单纯的传输服务器 公钥,变成了传输 CA证书,这样是否防止中间人攻击呢?

3.2.在加入CA证书的情况下遇到 MITM 攻击

3.2.1.情况一

中间人在劫持到 CA证书 后,什么都不做,转交给客户端

结果:没有丝毫影响,CA证书仍然是正常的,同时中间人也没有获取到任何信息

3.2.2.情况二

中间人在劫持到 CA证书 之后,更改其中的 公钥 信息,改为自己的 公钥

结果:客户端根据 CA证书 内容进行哈希计算后,得出的 数字摘要 与 CA证书 自带的 数字摘要 并不相同,认为该证书失效,不使用

3.2.3.情况三

中间人认为情况二失败的关键在于 摘要不一致,于是中间人在修改 公钥 的同时,修改了 数字摘要,并自己生成了一份 数字签名

结果:客户端无法使用 CA公钥 解密签名,因为这个签名非法

注意: 私钥加密,需要使用公钥解密,但 CA机构 的私钥只有它们自己拥有

3.2.4.情况四

中间人气急败坏,既然假证书不行,那就直接向 CA机构 申请一份证书,内容为自己的 公钥,即便它能申请到 CA证书,客户端在读取证书内容后,也会立马将证书丢弃,因为证书中包含了服务器的信息,客户端能轻而易举的发现当前证书中的服务器与自己想访问的目标服务器信息不一致

结果:客户端识别出证书不是自己想要的,丢弃证书,拒绝连接

需要明白的是,证书申请比较麻烦,并且证书是有使用时限的,一旦过期,就需要重新申请,这就保证了合法的证书是可靠的,可以根据其中的内容判断是否丢弃

最终方案

3.3.「非对称式加密」+「对称式加密」+「CA证书」

在「非对称式加密」+「对称式加密」的基础上,引入「CA证书」,确保客户端获取到的是安全、可靠的 公钥,再使用该 公钥 加密 密钥,形成密文,该密文只能由服务器使用自己的 私钥 解密,获取 密钥,进行数据传输

只要公钥是安全可靠的,那么服务器在收到密文时,得到的密钥也是安全可靠的

客户端通过 CA证书 获取到服务器的 公钥

使用 公钥 向服务器发送 密钥

双方使用 密钥 进行数据传输

有了「非对称式加密」+「对称式加密」+「CA证书」的解决方案,可以充分保证我们在上网冲浪时的安全性,这也就是为什么大多数钓鱼网站仍在使用 HTTP 协议,因为这样可以跳过整个安全检测方案

证书 扮演着重要角色,在访问那些 证书 过期,或者是没有 证书 的网站时需要提高警惕

3.4.补充

如何成为中间人?

ARP 欺骗、ICMP 攻击、假 WIFI、假网站


HTTPS 工作过程涉及到的三组密钥

第一组(非对称):CA 私钥加密后将证书颁发给服务器,CA 公钥公开

第二组(非对称):服务器把证书发送给客户端,其中包含了服务器的公钥,客户端(浏览器)中内置 CA 公钥,解密验证摘要合法后,客户端获取服务器公钥

第三组(对称):客户端将自己的密钥通过服务器公钥加密后,发给服务器,此时只有服务器能解密

星辰大海

相关文章推荐

网络基础「HTTP」

网络基础『 序列化与反序列化』

网络编程『简易TCP网络程序』

网络编程『socket套接字 ‖ 简易UDP网络程序』

网络基础『发展 ‖ 协议 ‖ 传输 ‖ 地址』

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

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

相关文章

MySql#MySql数据库基础

目录 一、什么是数据库 二、主流数据库 三、基本使用 1.连接服务器 2.使用 1.查看你数据库 2.创建数据库 ​编辑 ​编辑 ​编辑​编辑 3.使用数据库 ​编辑 4.创建数据库表 5.表中插入数据 6.服务器,数据库,表之间的关系 四、MySQL架构…

【算法】深度优先搜索岛屿数量

1、题目描述 有一个由0和1组成的二维矩阵,其中1代表陆地,0代表水,岛屿由水平或垂直方向上相邻的陆地连接形成。 假设矩阵的四周均被水包围,请计算岛屿的数量。 输入:matrix [[1,1,0,0],[0,0,1,0],[0,0,0,0],[0,0,1,1],…

for...in 可以用const声明item

代码&#xff1a; function* foo() {yield 1;yield 2;yield 3;}const genr foo();for (const item of genr) {console.log(item);}for (const i 0; i < 5; i) {console.log("i", i);}在这两段代码中&#xff0c;尽管两者都包含 for 循环&#xff0c;但它们的用途…

如何在 Gin 框架中处理多个 websocket 连接?

在Gin框架中处理多个WebSocket连接&#xff0c;你可以使用gorilla/websocket包。以下是一步步的指南&#xff1a; 首先&#xff0c;在你的终端运行go get github.com/gorilla/websocket来安装gorilla/websocket包。 创建一个Connection结构体来保存WebSocket连接和发送通道。 …

Git在无法访问github的访问方法

Git无法下载github上的源代码 代理的情况 问题&#xff1a;Failed to connect to github.com port 443 after 21100 ms: Couldnt connect to server 提示我们需要为Git单独配置代理。 查看我们的代理端口  为git 设置全局代理 git config --global http.proxy 127.0.0.1:&l…

C++中的回溯搜索法(Backtracking)

回溯搜索法&#xff08;Backtracking&#xff09;是一种通过试错的方法来解决问题的策略。在C中&#xff0c;这种方法通常用于解决诸如组合问题、划分问题、排列问题等&#xff0c;尤其在涉及到约束满足问题&#xff08;CSP&#xff0c;Constraint Satisfaction Problem&#x…

在C++中二维数组初始化的几种不同方法

在 C 中初始化二维数组可以有几种不同的方法&#xff0c;这取决于你想要的数组类型和初始化数据的具体情况。以下是一些常用的初始化方法&#xff1a; 1. 静态初始化 如果你知道数组的大小和初始值&#xff0c;可以直接在声明时初始化。这种方法使用嵌套的大括号 {} 来逐行指…

Apache反代理Tomcat项目,分离应用服务器和WEB服务器

项目的原理是使用单独的机器做应用服务器&#xff0c;再用单独的机器做WEB服务器&#xff0c;从网络需要访问我们的应用的话&#xff0c;就会先经过我们的WEB服务器&#xff0c;再到达应用程序&#xff0c;这样子的好处是我们可以保护应用程序的机器位置&#xff0c;同时还可以…

LNMP一键安装包

LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…

代码随想录leetcode200题之链表

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录代码随想录leetcode200题中链表部分的题目。 2 训练 题目1&#xff1a;203移除链表元素 C代码如下&#xff0c; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* Lis…

【学一点儿前端】Bad value with message: unexpected token `.`. 问题及解决方法

问题 今天从vue3的项目copy一段代码到vue2项目&#xff0c;编译后访问页面报错了 Bad value with message: unexpected token ..注意到错误字符‘.’&#xff0c;这个错误通常发生在处理 JavaScript 或者 HTML 中的动态表达式中&#xff0c;日常使用二分法不断缩小报错代码范…

JavaScript String indexOf() 方法

一、定义和用法&#xff1a; indexOf() 方法返回值在字符串中第一次出现的位置。 如果未找到该值&#xff0c;则 indexOf() 方法返回 -1。 indexOf() 方法区分大小写。 二、语法 string.indexOf(substring, start) 1、参数 substring必需。要搜索的字符串。start可选。开…

2024“天一永安杯“宁波第七届网络安全大赛极安云科战队部分WP

“天一永安杯”2024 宁波第七届网络安全大赛暨第九届大学生网络技术与信息安全大赛 大赛竞赛形式 一、线上初赛 参赛人员&#xff1a;各单位自行选拔3人&#xff08;设队长1名&#xff09;组成团队&#xff0c;不足3人不允许参赛。 竞赛时间&#xff1a;8&#xff1a;30-12&…

LLMs:《Better Faster Large Language Models via Multi-token Prediction》翻译与解读

LLMs&#xff1a;《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 目录 《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 Abstract 2、Method方法 Memory-efficient implementation 高效内存实…

IOS APP 常见UI控件

UILabel&#xff08;标签&#xff09;UITextField&#xff08;文本输入框&#xff09;UITextView&#xff08;文本视图&#xff09;UIButton&#xff08;按钮&#xff09;UIImageView&#xff08;图像视图&#xff09;UISwitch&#xff08;开关&#xff09;UIStepper&#xff0…

详解LLMOps,将DevOps用于大语言模型开发

大家好&#xff0c;在机器学习领域&#xff0c;随着技术的不断发展&#xff0c;将大型语言模型&#xff08;LLMs&#xff09;集成到商业产品中已成为一种趋势&#xff0c;同时也带来了许多挑战。为了有效应对这些挑战&#xff0c;数据科学家们转向了一种新型的DevOps实践LLM-OP…

python数据分析——在数据分析中有关概率论的知识

参数和统计量 前言一、总体二、样本三、统计抽样四、随机抽样4.1. 抽签法4.2. 随机数法 五、分层抽样六、整群抽样七、系统抽样八、统计参数九、样本统计量十、样本均值和样本方差十一、描述样本集中位置的统计量11.1. 样本均值11.2. 样本中位数11.3. 样本众数 十二、描述样本分…

windows和linux生成代码patch补丁

windows和linux生成代码patch补丁 如需转载请标明出处&#xff1a;http://blog.csdn.net/itas109 文章目录 windows和linux生成代码patch补丁前言1. .patch补丁2. 差异文件按目录结构导出到文件夹问题1. "Hunk #1 FAILED at 1 (different line endings)" 环境&#…

K8S 哲学 - 服务发现 services

apiVersion: v1 kind: Service metadata:name: deploy-servicelabels:app: deploy-service spec: ports: - port: 80targetPort: 80name: deploy-service-podselector: app: deploy-podtype: NodePort service 的 endPoint &#xff08;ep&#xff09; 主机端口分配方式 两…

【银角大王——Django课程——靓号页面的基本操作(列表,新建,删除)】

靓号管理 靓号列表显示表结构根据表结构的需求&#xff0c;在models.py中创建类URL.py编写views.py中 函数编写列表显示HTML页面效果 新建靓号编写&#xff08;添加&#xff09;URL.py编写views.py中 函数编写新建靓号HTML数据校验方式一&#xff1a;&#xff08;正则表达式&am…