网络原理 - HTTP / HTTPS(5)——https协议

news2024/9/18 6:37:38

目录

一、HTTPS是什么

为什么要进行加密

二、“加密” 是什么

三、HTTPS的工作过程

(1)引入对称加密

对称密钥的特点:

(2)引入非对称加密

非对称加密的特点:

(3)中间人攻击

(4)引入证书

1、证书的介绍

2、证书验证过程

3、几个关键问题(黑客不能篡改证书的原因)

1)黑客能不能修改证书里的公钥?

2)黑客能不能修改证书里的公钥,也尝试重新生成签名,替换原来的签名?

3)黑客能不能自己去公证机构申请一个证书,把服务器的证书替换成自己的?


一、HTTPS是什么

        HTTPS也是应用层协议,它是基于HTTP,引入了加密层,S是safe(安全)的意思,HTTPS 就是 HTTP + SSL(加密层)HTTP协议内容是按照文本的方式,进行明文传输的,这就可能导致在传输过程中,数据被篡改的情况,还有黑客如果黑进某个设备,就能窃取到这些传输数据,你的设备信息就会被泄露

为什么要进行加密

        这里介绍一个臭名昭著的运营商劫持,我们下载一个天天动听,如果未被劫持,就是天天动听的下载链接,如图:

        但是被劫持后,就变成QQ浏览器的下载链接了,如图:

        运营商能进行劫持,也是因为他们自身有能力进行劫持,各大企业、公司都会用到运营商提供的路由器 / 交换机,进行网络传输时,数据会经过这些设备,运营商就可以做一些程序,把经过这些设备的网络数据,截取到,然后再进行篡改里面的数据,比如说把上面天天动听的下载地址,改成QQ浏览器,这就是其所谓的运营商劫持了,其实还能劫持其他的信息,比如Referer,以前的偷流量事件。下图介绍一下更换下载链接的大概流程:

        当前大部分网站设置成HTTPS就是拜运营商所赐的,因为HTTPS可以把数据进行加密,不容易把网络传输的数据进行篡改或者窃取。

        思考一下,运营商为啥要这么搞呢?原因是因为被金钱蒙蔽了双眼。

        

        其实不止运营商可以对网络数据进行劫持,黑客也可以,而且如果被黑客劫持了,后果会更加严重、危险,泄露了个人信息、手机的一些应用账号、密码等,这就更加危险了,所以,对HTTP数据包,进行加密,套上一层加密层非常重要


二、“加密” 是什么

        加密 就是把 明文(要传输的信息)进行一系列变换,生成 密文;相反,解密 就是 把 密文,进行一系列的变换,还原为 明文

        在这个 加密 和 解密 过程中,往往需要一个或者多个中间数据,进行辅助转换,这个中间数据就称为 “密钥”(钥的正确读音是:yue,第四声;但平常我们都说成 yao,第四声)。

        引入 加密,是为了保证数据安全的有效手段这里,我们只需要把 加密 的成本尽可能降低,使 破解成本 高于 加密成本 + 数据本身价值,我们就称为 数据 是安全

        这里举个83版《火烧圆明园》的例子,当时有人要谋反,干掉慈禧太后,这时候恭亲王奕诉就给慈禧太后传了个折子和有孔的纸张,折子里面表面就是聊聊家常,没有其他的内容,但是这时候,把有空的纸张和折子折叠后,就会出现:当心肃顺,端华,戴恒(这几个人都是当时的权臣,后来被慈溪一锅端了)。如图:

        明文:

        把带孔纸张和折子折叠后(密文):

        上面这就涉及到密码学,里面有三个比较重要的属性:明文、密文、秘钥。

        明文就是要传输的真实数据,要表达的实际意思。(折子)

        密文针对密文加密过后得到的结果,往往是不直观,不易理解的。(折子和带孔纸张重叠后)

        密钥在加密和解密过程中,非常重要的中间 “钥匙”,辅助加密、解密的转换。(带孔纸张)

        加密、解密在现在,已经发展成一个独立的学科了:密码学而密码学的奠基人,也正是计算机祖师爷之一:艾伦  麦席森  图灵。图灵大佬因遭英国皇家的迫害,41岁就英年早逝了;在2013年12月24日,英国女王伊丽莎白才终于向图灵大佬颁发 皇家赦免。在计算机领域中,最高荣誉就是以他的名字命名的:图灵奖。(像大佬致敬!!!)


三、HTTPS的工作过程

        其实,只要针对HTTPS数据进行解密,就能得到HTTP的数据格式;上面说的运营商劫持、黑客入侵,本质上都是明文传输惹的祸所以我们需要对上述传输的数据,进行加密,使其变成 “密文”,对数据起到保护作用,加密就是HTTPS的工作过程

        加密的方式有很多,其主要分为两大类:对称加密 和 非对称加密。

(1)引入对称加密

        通过加密的方式,针对http数据进行加密;而对称加密,就是客户端和服务器对加密后的http数据,进行解密,需要用到的密钥 是一样的

对称密钥的特点:

        1、客户端和服务器使用的密钥一样

        2、不同的客户端,使用的密钥不同

        3、因为加密解密用的都是同一个密钥,所以运算速度快

        下面介绍加密解密的大概流程,如图:

        注意:这里每个客户端的密钥都要不同,如果很多的客户端的密钥都相同,黑客还是能很容易的拿到密钥,对网络传输的数据进行解密,拿到明文这也意味着,每个客户端连接服务器的时候,都需要自己生成一个随机密钥,并且把这个密钥告诉服务器(也可以是服务器生成,把密钥告诉客户端)

          但是,因为密钥生成的时候,只有单方知道,对面不知道,所以密钥也要进行网络传输,黑客就不能拿到吗?答案肯定是能的;所以,对称加密也是不安全的,黑客仍然能比较轻松的拿到密钥,那么,后续的加密一系列操作也都没用了,黑客有密钥,就能进行解密,获得明文。如图:

        因此,针对密钥,我们还要再进行一次加密,这就是非对称加密的内容了。

(2)引入非对称加密

        非对称加密就是加密和解密的密钥不同,加密使用的一个密钥,解密使用的就是另一个密钥了

非对称加密的特点:

        1、加密 和 解密 使用的 密钥 不同

        2、引入公钥和私钥,公钥加密对称密钥,会进行网络传输;私钥解密对称密钥,不会进行网络传输

        3、因为加密、解密使用的密钥不同,所以运算速度慢

        这里的非对称加密,不能针对 后续传输的 header、body进行加密,因为header和body内容还是比较长、比较多的,如果针对这些进行加密、解密,就会消耗很多的CPU资源,如果只是加密、解密一些header、body,也还好,CPU扛得住,但我们知道,服务器是要面对很多用户的,这么多的用户,对这些的请求、返回的响应,都进行加密、解密,CPU必然是吃不消的,这消耗的CPU资源是非常庞大的。(这里使用 公钥 对 对称密钥进行加密,保证对称密钥的安全性,服务器这边使用私钥对加密后的对称密钥进行解密,拿到对称密钥

        所以,我们是对http数据包使用对称密钥加密,保证http数据的安全性,再使用公钥把对称密钥进行加密,保证对称密钥的安全性,服务器会有一个私钥,这个私钥可以对加密后的对称密钥进行解密(拿到对称密钥)私钥也不会进行网络传输,私钥也只有服务器才知道(公钥和私钥都是服务器生成的),客户端、黑客都不知道。这样黑客即使知道公钥,不知道私钥,就不能把加密后的对称密钥进行解密,就不能对加密数据进行解密,不能拿到明文。

        注意:公钥和密钥都是服务器生成的,是成对出现的私钥也不会进行网络传输;对称密钥把数据进行加密后,还会对 对称密钥 进行加密使用公钥进行加密,因为黑客没有私钥,无法把公钥还原成对称密钥,就无法对数据进行解密,拿到明文了

        下图介绍非对称加密,网络传输的大概流程,如图:

        上图的首次连接,客户端随机生成 对称密钥,然后向服务器索要 公钥,客户端 使用 公钥 加密 对称密钥,传给服务器,服务器使用私钥,解密拿到 对称密钥,再告知客户端我拿到 对称密钥了

        这个过程就是交换密钥的过程,也是SSL内部完成的工作,因为HTTPS的底层也是TCP,当TCP的三次握手完成后,就要进行SSL的握手了(交换密钥的过程),后续的网络交互,才是真正的传输业务数据(http请求 / 响应)

        但上述引入了非对称加密,任然存在重大安全漏洞,黑客任然有机会拿到私钥,就是下面中间人攻击的内容了。

(3)中间人攻击

        因为生成公钥和私钥的算法是公开的,所以黑客也能生成公钥和私钥,当黑客黑进某个设备后,客户端和服务器在建立连接,客户端向服务器索要公钥时,黑客黑进的设备在它们(客户端和服务器中间)中间,就可以把自己的公钥返回给客户端,服务器发给客户端的公钥,用自己的私钥解密 加密后的对称密钥,被黑进的设备也能拿到就能拿到对称密钥了

        这时候,客户端和服务器进行网络交互时,被黑进的设备就能通过黑客的私钥,解密 密文(加密后的对称密钥),拿到对称密钥,就可以用对称密钥解密密文了,然后可以进行篡改、也可以窃取重要信息黑客拿着这个明文,再用服务器给的公钥进行加密,发给服务器,服务器也能用自己的私钥,解密 密文(加密后的对称密钥),那拿到对称密钥,构造完响应,进行加密再返回,之后的操作也和上面一样,这样客户端和服务器都不会察觉到有异常现象,但明文数据却已经泄露了

        下图是其大概流程:

        

        那怎么办呢,怎么让客户端能识别出,首次连接,返回的公钥是黑客的还是服务器的,如果能进行判断,这样网络传输数据的安全性就能大大提高。这也就是下面引入证书的内容了

(4)引入证书

1、证书的介绍

        证书是公证机构提供的,证书其实是一个结构化数据里面会包含很多属性,但也是字符串形式的,证书会包含一系列的信息,例如:服务器的主域名、服务器生成的公钥、证书有效期、公证机构信息、证书签名等等。

        引入证书就是为了让客户端这边,能够识别出,收到的公钥是不是服务器传过来的。

        这个证书是第三方提供的所以服务器这边要去第三方申请一个证书(提交材料会包含服务器的地址、域名等等),第三方这边同意后就会给给服务器颁发一个证书

        在客户端和服务器连接后,客户端会向服务器索要证书,服务器收到请求后就会返回服务器拿到的证书,里面就会包含公钥,下面的大概流程图:

        这里有个关键的问题:黑客是否能修改证书里的公钥?答案肯定是不行的!因为客户端收到证书后,会对证书进行验证真伪的操作。下面介绍证书验证过程。

2、证书验证过程

        证书包含很多信息服务器的主域名、证书有效时间、服务器的公钥、公证机构信息、证书签名等等

        这里面的信息有一个非常重要:证书签名公证机构在颁发证书前,会给这个证书计算出一个校验和,然后再使用公证机构的私钥(不是服务器),对这个校验和进行加密,就得到了证书签名(本质就是加密后的校验和)

        客户端收到证书后,会通过一系列的算法(CRC、MD5等),得到一个较短的字符串,也就是校验和A然后用公证机构的公钥,对 证书签名 进行解密,拿到校验和B再进行比较如果校验和A和校验和B一样,也就说明,这次拿到的证书是服务器发过来的

下面是客户端拿到证书后做的事(证书的验证过程):

        1)按照校验和的算法,把证书的其他字段都重新计算一遍,得到校验和1

        2)使用系统内置的公证机构的公钥,用公钥解密证书签名,得到校验和2

        3)进行对比,判断 校验和1 和 校验和2 是否相同相同就说明证书是服务器传过来的,就是原版证书,没有被修改过;如果证书被人篡改过(比如黑客修改了证书的公钥,替换成自己的),此时按照校验和算法算出了的校验和1,肯定和校验和2不同,此时客户端就能识别出来了(此时浏览器就会跳出一个告警页面,你访问网站有风险,这种情况可能是证书的有效期过期了,也可能是证书的公钥被修改过)

        下面介绍几个关键问题,也是利用了证书的特性,导致黑客不能篡改证书的原因:

3、几个关键问题(黑客不能篡改证书的原因)

黑客黑进某个设备,在网络传输的中间,截获到密文,然后能不能进行下面几个操作?

1)黑客能不能修改证书里的公钥?

        不行因为如果修改了证书里的公钥,按照校验和的算法,把证书的字段都计算一遍,算出来的校验和肯定会和原来的不同(使用公证机构的公钥,解密证书签名得到的校验和,跟这个校验和也会不同)。

2)黑客能不能修改证书里的公钥,也尝试重新生成签名,替换原来的签名?

        不行;如果修改了证书签名(使用了黑客自己的私钥进行加密),那么用系统内置的公证机构的公钥,进行解密证书签名,就会解析失败,客户端也就自然可以知道这个证书不对了还有就是黑客不知道公证机构的私钥是什么,那也就无法生成正确的证书签名了,私钥也只有公证机构会知道

3)黑客能不能自己去公证机构申请一个证书,把服务器的证书替换成自己的?

        不行;因为证书里面包含了一个信息:服务器的主域名(域名也是唯一的),黑客去申请也只能拿到黑客设备的域名证书,不能是服务器的域名。所以客户端看到证书里面的域名不是服务器,自然就能辨别真假证书了

因为有了证书的特性,就能彻底把黑客篡改证书的路堵死了


        当然,上面所讨论的安全,也不是绝对的安全;上述的安全本质上都是基于非对称加密体系,非对称加密也不是无懈可击的,只不过破解这样的加密体系,需要的计算量非常庞大,超出了现有的计算机算力上限

        所以,现如今各国都忙着搞量子计算机,相比于现在的计算机,量子计算机的算力提升非常大,如果美国先搞出来,那破解一下网络传输的信息,就能轻而易举的知道各国的机密了;相当于谁先搞出来,谁就赢麻了(秦始皇(嬴政)吃麻椒,赢麻了)。

都看到这了,点个赞再走吧,谢谢谢谢谢

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

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

相关文章

深入浅出 -- 系统架构之负载均衡Nginx反向代理

一、Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下: Controller public class IndexNginxControl…

免费SSL证书申请指南

在互联网时代,HTTPS安全协议已成网站标配,而SSL/TLS证书是实现HTTPS的关键。以下是如何申请免费证书的简明流程: 1.选择证书颁发机构(CA):现今很多知名CA如JoySSL、Lets Encrypt等提供免费SSL证书服务。选定…

云备份day02

📟作者主页:慢热的陕西人 🌴专栏链接:C云备份项目 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容介绍了第三方库jsoncpp和bundle库的使用 文章目录 云备…

关于Linux下的进程状态(进程篇)

目录 Linux操作系统的一般进程状态 关于阻塞 关于挂起 Linux内核状态源代码: 关于僵尸进程 关于孤儿进程 Linux操作系统的一般进程状态 新建:字面意思运行:task_struct结构体在运行队列中排队,就叫做运行态阻塞:等待非…

Java项目:基于Springboot+vue社区医院管理系统设计与实现(源码+数据库+毕业论文)

一、项目简介 本项目是一套基于Springbootvue社区医院管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能…

机器学习知识点全面总结

机器学习按照模型类型分为监督学习模型、无监督学习模型两大类。 1、有监督学习 有监督学习通常是利用带有专家标注的标签的训练数据,学习一个从输入变量X到输入变量Y的函数映射。Y f (X),训练数据通常是(nx,y)的形式,其中n代表训练样本的大…

基于springboot实现甘肃非物质文化网站系统项目【项目源码+论文说明】

摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本甘肃非物质文化网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信…

Java Number类(详细)

一,Number java.lang.Number 类是抽象类,用于表示各种数值类型的对象。它是 Java 中所有数值类型的包装类的超类。Number 类主要有以下几个特点和作用: 抽象类:Number 类是一个抽象类,不能直接实例化,但可以…

计算机中数的表示

0. 简介 介绍计算机中数的表示方法,主要内容来自 c s a p p csapp csapp。 1. 整数的表示 包括有符号整数与无符号整数的表示。 假设 w → [ w n − 1 w n − 2 . . . w 0 ] \overrightarrow w[w_{n-1}w_{n-2}...w_0] w [wn−1​wn−2​...w0​] 为一种整数。…

【Python系列】将生成的 JSON 数据写入 JSON 文件

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

嵌入式开发学习---(部分)数据结构(无代码)

数据结构 为什么学习数据结构? 1)c语言告诉如何写程序,数据结构是如何简洁高效的写程序 2)遇到一个实际问题,需要写程序去实现相应功能,需要解决那两个方面的问题? 如何表达数据之间的逻辑规律…

智慧公厕,城市管理新亮点

在现代城市环境建设中,智慧公厕作为智慧环卫的重要组成部分,正以其先进的技术手段,成为城市管理的亮点和标杆。借助物联网等技术的应用,智慧公厕实现了信息化、数字化、智慧化的全面升级,为市民提供了更便捷舒适的公共…

[WIP]Sora相关工作汇总VQGAN、MAGVIT、VideoPoet

视觉任务相对语言任务种类较多(detection, grounding, etc.)、粒度不同 (object-level, patch-level, pixel-level, etc.),且部分任务差异较大,利用Tokenizer核心则为如何把其他模态映射到language space,并能让语言模型更好理解不同的视觉任…

Linux安装及管理程序(rpm)

目录 一.Linux应用程序基础 1.应用程序与系统命令的关系 2.典型应用程序的目录结构 3.常见的软件包封装类型 二.RPM包管理工具 1.rmp 查询 2.rpm安装与卸载 3.维护 RPM 数据库 一.Linux应用程序基础 1.应用程序与系统命令的关系 对比系统命令和应用程序的不同 1.1位…

聚簇索引与非聚簇索引b+树实现的区别

文章目录 聚簇索引非聚簇索引B树中聚簇索引的查找(匹配)逻辑B树中非聚簇索引的查找(匹配)逻辑 聚簇索引 特点: 索引和数据保存在同一个B树中 页内的记录是按照主键的大小顺序排成一个单向链表 。 页和页之间也是根据…

Vite 项目中环境变量的配置和使用

Vite 项目中环境变量的声明 我们要在 Vite 项目中进行环境变量的声明,那么需要在项目的根目录下,新建 .env.[mode] 文件用于声明环境变量,如: .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…

FastWiki发布`0.2.4`支持js 函数

Release v0.2.4 AIDotNet/fast-wiki (github.com) 支持JS动态functioncall调用支持动态function管理支持JS在线编辑提供智能代码提示支持JS在线编辑提供部分绑定的c#类(默认提供Console,HttpClient)支持Application绑定多个Function Call优…

异常处理之Java异常体系

Throwable java.lang.Throwable 类是Java程序执行过程中发生的异常事件对应的类的根父类。 Throwable中的常用方法: public void printStackTrace():打印异常的详细信息。 包含了异常的类型、异常的原因、异常出现的位置、在开发和调试阶段都得使用prin…

NLP 在搜索引擎优化上做的工作

自然语言处理(NLP)在搜索引擎优化上的工作主要集中在提升搜索结果的相关性和准确性,以及改善用户的搜索体验。以下是NLP在搜索引擎优化中所做工作的详细介绍: 1. 理解用户查询意图【4】 NLP技术可以帮助搜索引擎更好地理解用户的…

LeetCode:1026. 节点与其祖先之间的最大差值(DFS Java)

目录 1026. 节点与其祖先之间的最大差值 题目描述: 实现代码与解析: DFS 原理思路: 1026. 节点与其祖先之间的最大差值 题目描述: 给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff…