HTTPS的工作过程

 1.HTTPS协议原理

1.1HTTPS协议的由来

HTTP在传输网络数据的时候是明文传输的,信息容易被窃听甚至篡改,因此他是一个不安全的协议(但效率高)。在如今的网络环境中,数据安全是很重要的(比如支付密码又或者各种私密信息等)因此,为了解决这一安全问题HTTPS由此诞生。HTTPS(Hyper Test Transfer Protocol Secure)在HTTP的基础上加入了SSL/TLS加密机制,通过对传输数据的加密,来确保数据传输过程中的安全性,从而降低信息被窃听和篡改的风险,进而确保用户数据的安全,他是目前网络上应用最广泛和安全的协议。

臭名昭著的“运营商劫持”

下载一个“天天动听”

未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接

已被劫持的效果,点击下载按钮就会弹出QQ浏览器的下载链接

由于我们通过网络传输数据的任何数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你的数据内容,并进行篡改。

很明显这背后存在某种交易~~     这时候加密就是一种重要的手段

1.2怎么样才能做到传输安全

首先,网络传输的数据要具有安全性,要保证数据安全,最核心的要点就是“加密”,

黑客领域的攻防都是“相对” 的概念~~对抗过程~~

但是可以做到,即使数据被黑客拿到了,他也解析不了、无法篡改~~也能起到安全的效果~~

加密来做到~~ 

你加密的数据,理论上来说,也有可能被黑客破解~~

加密的成本很低,破解的成本很高~~

只要破解的成本,超出了要保护数据本身的价值,就是安全的!!

加密对称:加密和解密,使用的是同一个密钥。

非对称加密:加密和解密,使用的是两个密钥 这两个密钥,k1和k2是成对的,可以使用k1来加密,此时就是k2解密;也可以使用k2来加密,此时就是k1解密。

这个特性的背后有一系列的数学原理~~

两个密钥,就可以一个公开出去,称为“公钥”,另一个自己保存好,称为“私钥”(手里只有一把的话,是无法知道另一把是啥的)。

1.3HTTP和HTTPS的选择

上述说HTTP是明文传输数据的,即HTTP不会对数据进行保护(加密/解密)那么另一种意思也就是说:HTTP在传输数据时,会做的事情比较少,因此他的效率相比于HTTPS是高的。

因此,一般情况下,如果网络环境比较安全,比如在公司的内网中传输数据,可能会优先使用HTTP以此来提高数据传输的效率和降低传输延迟。另一种就是对数据机密性和完整性比较高的要求时,就会优先使用HTTPS协议,来确保数据在传输的过程中安全。

总而言之,HTTP和HTTPS的选择要根据环境而定。

2.HTTPS工作过程

只要针对HTTPS的数据进行解密了,就能够得到HTTP格式数据。

1.1中所述的运营商劫持,无论是修改referer还是修改返回的链接(body),本质上都是明文传输惹的祸。这是就需要引入加密,对上诉传输数据进行保护~~  主要是针对header和body进行加密~

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

2.1引入对称加密

通过对称加密的方式,针对传输的数据进行加密操作。

1.对称加密的时候,客户端和服务器需要使用同一个密钥。

2.不同的客户端,需要使用不同的密钥。

(如果所有客户端的密钥都相同,加密如同虚设,黑客很容易拿到密钥)

这就意味着每个客户端连接服务器的时候,都需要自己生成一个随机的密钥,并且把这个密钥告知服务器,(也不应定是客户端生成,服务器也行,也是需要告诉客户端的)

这就是问题的关键!!!密钥需要传输给对方的,一旦黑客拿到了这个密钥,意味着加密操作就无意义了~~

这里我们需要考虑,针对咱们的密钥,也进行密文传输~~

假设使用对称加密,引入key2针对key进行加密,意味着需要把key2也传输给服务器,服务器才能解密拿到key~~ (但是key2还是可能被黑客拿到~~)

2.2引入非对称加密 

使用非对称加密,主要目的就是为了对对称加密进行加密,确保对称密钥的安全性~~

不能使用非对称加密,针对后续传输的各种header body等进行加密,而是只能使用非对称加密去加密对称密钥~~(非对称加密的加密解密成本(消耗CPU资源)钥远远高于对称加密)

少来少去的用点都可以,如果大规模使用,就难以承担了~~

此处就让服务器持有私钥(只有服务器知道)客户端持有公钥(黑客也能知道)

客户端就可以使用公钥,对已生成的对称密钥进行加密~~

黑客虽然手里有公钥,但是密文需要通过私钥才能进行解密,私钥黑客拿不到~~

黑客就无法对这个数据解密,也就不能拿到888888对称密钥了~~

只要888888安全到达服务器,后续服务器和客户端之间就可以使用888888作为对称加密的密钥,此时黑客就无法破解后续的数据了~~

此处的公钥 私钥也可以这样理解

有些老的住房有信箱

你手里有信箱钥匙(私钥),邮递员手里有锁头(公钥)~~

流程:服务器生成一对非对称密钥,私钥服务器自己持有,公钥则可以告知任何的客户端。

客户端在连接上服务器之后,就需要先从服务器这边拿到公钥(公钥本身就可以公开出去,不需要加密传输)客户端生成对称密钥,拿着公钥对 对称密钥进行加密。

此时就可以把加密后的密文进行传输了,由于想要解密,必须通过私钥,而私钥只有服务器自己知道,此时这样的加密数据就可以比较安全的到达服务器了

服务器通过私钥解密之后得到了对称密钥,接下来和客户端之间的通信就通过对称加密来完成了。

此时黑客拿到的是一个key加密后的结果,此时黑客要是想要解密,需要知道pri,而pri私钥只要服务器自己知道,黑客拿不到。(黑客监听中间的通信数据,要比黑入服务器这边容易一些,如果都能黑进服务器了,大概就可以直接拖数据库了,用户信息都被拿到了)

SSL内部完成工作,使用HTTPS的时候,底层也是TCP,先进行TCP三次握手,TCP连接打通之后,就要进行SSL的握手了(交换密钥的过程)后面才是真正传输业务数据(完整HTTP的请求响应了)

2.3仍然存在问题  

上述操作,仍然存在重大的安全漏洞,黑客仍然是有办法获取到对称密钥key的~  中间人攻击

针对上述问题,如何解决?

最关键的一点,客户端拿到公钥的时候,要能有办法验证,这个公钥是否是真的,而不是黑客伪造的。要求服务器这边要提供一个“证书”

证书是一个结构化的数据(里面包含很多属性,最终以字符串的形式提供)

证书中会包含一些列的信息。

比如,服务器主域名,公钥,证书有效期.......

证书是搭建服务器的人,要从第三方的公正机构进行申请的~~(申请的时候当然要提交材料,人家审核)

2.4证书

证书验证过程~

证书:

服务器的域名....

证书的有效时间......

服务器的公钥.......

公证机构的信息.....

...................

证书的签名..... 

  ||

颁布证书的公正机构 会在发布证书的时候,给这个证书计算出一个校验和

然后公证机构使用自己的私钥(和服务器的私钥无关)针对校验和进行加密,此时就得到了证书的签名。

此处所谓的“签名”本质上是一个经过加密的校验和!! 把证书中其他的字段通过一系列的算法(CRC,MD5等)得到一个较短的字符串 ==> 校验和  如果两份数据内容一样,此时的校验和就一定是相同的;如果校验和不同,两份数据的内容则一定不同(逆否命题)

客户端拿到证书以后,主要做两件事:

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

2.使用系统中内置的公证机构公钥,对证书的签名进行解密,得到校验和2;

此时,就可以对比,看这俩校验和是否一致!!

如果一致,说明证书是没有被修改过的,就是原版证书。

如果过不一致,说明证书被别人篡改过了(比如黑客如果替换了自己的公钥,此时算出来的校验码就一定改变)

此时客户端就能识别出来了!!

黑客无法修改证书中的内容!!

1.如果黑客直接修改公钥,不能改签名。

此时客户端校验和是一定不一样的,就识别出来了

2.如果黑客修改公钥,也尝试重新生成签名~~

如果黑客不知道公证机构的私钥,所以黑客无法重新生成加密签名~~

如果黑客拿自己的私钥加密呢??客户端这边拿着公证机构的公钥也会解密失败~~

上述操作就把黑客篡改证书的行为给堵死了

3.黑客能不能自己也去公证机构申请个证书??然后把自己的证书替换掉服务器的证书呢??

还是不行

域名是唯一的!!黑客申请的证书的域名,和服务器的域名肯定不同!!

客户端拿到证书之后,一看到域名都不一样,直接就知道证书是假冒的,都不用校验和了

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

当然以后随着算力的提升,尤其是量子计算机崛起,我们的算力又会大幅度的提升,对象有点密码学体系就会造成重大冲击~~

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

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

相关文章

鸿蒙UI开发——渐变色效果

1、概 述 ArkTs可以通过颜色渐变接口,设置组件的背景颜色渐变效果,实现在两个或多个指定的颜色之间进行平稳的过渡。 目前提供三种渐变类型:线性渐变、角度渐变、径向渐变。 我们在鸿蒙UI布局实战 —— 个人中心页面开发中,默认…

距离与AoA辅助的三维测距算法(适用于四个基站的情况的单点定位),MATLAB代码

本MATLAB 代码实现了一个基于LOS/NLOS混合环境的单点定位系统,主要用于估计目标物体的单点位 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分 绘图与输出 代码运行结果 定位结果如下: 命令行的坐标和误差输出: 部分代码…

Vue指令(一)--v-html、v-show、v-if、v-else、v-else-if、v-on、v-bind、v-for、v-model

目录 (一)初识指令和内容渲染指令v-html 1.v-html 案例: 官网的API文档 (二)条件渲染指令v-show和v-if 1. v-show 2. v-if (三)条件渲染指令v-else和v-else-if 案例 (四…

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景: 前几天在服务器上部署了一个免费影视网站,这个应用需要四个容器,同时之前的建站软件workpress也是使用docker部署的,也使用了三个容器。在使用workpress之前,我将影视软件的容器全部停止。 再使用workpress…

【JavaEE 进阶(一)】SpringBoot(上)

博主主页: 33的博客 文章专栏分类:JavaEE ??我的代码仓库: 33的代码仓库?? ???关注我带你了解更多进阶知识 目录 1.前言2.Spring3.第一个SpringBoot程序4.Spring MVC 4.1建立连接 4.1.1RequestMapping使用 4.2请求 4.2.1传递单个参数4.2.2传递多个参数4.2.3传递一个对象…

(未更新完)day30-IO-阶段综合案例(带权重的随机每日一记)(笔记完全来源于黑马程序员)

目录 0 目录一、听黑马阿玮的视频记录的笔记1. 制造假数据1.1 如何制造假数据1.2 练习1-生成方式1:爬取姓氏、男生名字、女生名字1.3 练习2-生成方式1:在练习1的基础上,将数据写入本地文件1.4 练习3-生成方式2:利用糊涂包生成假数…

FPGA中所有tile介绍

FPGA中包含的tile类型,以xinlinx 7k为例,可以通过f4pga项目中的原语文件夹查看,主要包含以下这些: 以下是您提到的 Xilinx 7 系列 FPGA 中各种模块的含义及用途: 1. BRAM (Block RAM) BRAM 是 FPGA 中的块存储资源&…

如何解决压测过程中JMeter堆内存溢出问题

如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出?二、解决堆内存溢出措施三、堆内存参数应该怎么调整?四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后,JMeter日志窗口报错“java.lang.OutOfMe…

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx,将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包,点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h,粘贴到我们自己的工程文件夹的bsp中&#xff08…

学习记录,正则表达式, 隐式转换

正则表达式 \\:表示正则表达式 W: 表示一个非字(不是一个字,例如:空格,逗号,句号) W: 多个非字 基本组成部分 1.字符字面量: 普通字符:在正则表达式中,大…

标书里的“废标雷区”:你踩过几个?

在投标领域,标书的质量不仅决定了中标的可能性,更是体现企业专业度的关键。但即便是经验丰富的投标人,也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中,也可能是投标文件格式的规范问题。以下&…

k8s-编写CSI插件(3)

1、概述 在 Kubernetes 中,存储插件的开发主要有以下几种方式: CSI插件:Container Storage Interface (CSI) 是 Kubernetes 的标准插件接口,是全新的插件方案,插件和驱动调用通过grpc协议,功能丰富&#x…

R语言机器学习论文(三):特征提取

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据归一化二、离散型分类变量的编码三、筛选特征四、重要特征五、输出结果六、总结系统信息介绍 在数据分析和机器学习项目中,经常需要对数据进行预…

用 NotePad++ 运行 Java 程序

安装包 网盘链接 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装完成: 配置编码 用 NotePad 写 Java 程序时, 需要设置编码. 在 设置, 首选项, 新建 中进行设置, 可以对每一个新建的文件起作用. 之前写的文件不起作用. 在文件名处右键, 可以快速打开 CMD 窗口, 且路…

Leetcode打卡:骑士在棋盘上的概率

执行结果:通过 题目:骑士在棋盘上的概率 在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - …

[Java]项目入门

这篇简单介绍一些入门的有关项目和行业的知识,并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍,一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分: 1.前端。比如你现在看到的CSDN页面就是一…

全连接层与链式求导法则在神经网络中的应用

目录 ​编辑 引言 全连接层的工作原理 前向传播 反向传播 链式求导法则及其在神经网络中的应用 链式求导法则 应用于全连接层 计算梯度 结论 引言 在深度学习领域,全连接层(Fully Connected Layer,FC)和链式求导法则是…

泷羽Sec-星河飞雪-bp抓APP包的相关配置方法

免责声明 学习视频来自 B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:http…

00. Nginx-知识网络

知识目录 语雀知识网络,点击“”-- 点击“”查看知识网络 01. Nginx-基础知识 02. Nginx-虚拟主机 03. Nginx-Web模块 04. Nginx-访问控制 05. Nginx-代理服务 06. Nginx-负载均衡 07. Nginx-动静分离 08. Nginx-平滑升级 09. Nginx-日志切割 10. Nginx-…

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目,整合knef4j和mybaits实现基础用户信息管理 后端环境搭建1.1 环境准备1.2 数据库表准备1.3 SpringBoot3项目创建1.4 MySql环境整合,使用druid连接池1.5 整合mybatis-plus1.5.1 引入mybatie…