HTTPS协议深入理解

news/2024/10/30 17:28:07/

  • 博主简介:想进大厂的打工人
  • 博主主页:@xyk:
  • 所属专栏: JavaEE初阶

 目录

文章目录

一、HTTPS协议的由来及概念

二、加密是什么

三、HTTPS的工作流程

3.1 使用对称密钥

3.2 引入非对称加密

3.3 中间人攻击

3.4 引入证书


一、HTTPS协议的由来及概念

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层,其他方面基本和HTTP协议一致~~~

那么为什么要有HTTPS?它能解决什么问题?

因为HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,最出名的就是“运营商劫持”!!!

什么是 “运营商劫持”?

所谓运营商劫持,就是运营商通过交换机或者路由器上面转发的数据,在他的其他设备上部署一个小小的抓包程序识别到特定包,从而做出修改~~

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

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

点击 "下载按钮", 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 "QQ浏览器" 的下载地址了.

 HTTPS就是为了解决这一问题,在HTTP基础上进行了加密来保证信息安全

二、加密是什么

加密:针对 HTTP 的各种 header 和 body 进行加密

一组重要的概念:

  • 明文:实际要传达的信息
  • 密文:转换后得到的信息

  • 把明文 => 密文 :加密
  • 把密文 => 明文 :解密

在加密和解密的过程中,需要一个关键的钥匙 => 密钥

加密解密到如今已经发展成一个独立的学科: 密码学

而密码学的奠基人, 也正是计算机科学的祖师爷之一, 艾伦·麦席森·图灵

 计算机领域中的最高荣誉就是以他名字命名的 "图灵奖"~~

对于密码学,我们不讨论细节算法,只考虑宏观的流程~~

三、HTTPS的工作流程

既然要保证数据安全, 就需要进行 "加密",网络传输中不再直接传输明文了, 而是加密之后的 "密文".加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密

对称加密:只有一个密钥,key

  • 明文 + key => 密文
  • 密文 + key => 明文

加密和解密使用同一个密钥~~对称加密的特点,计算速度快

非对称加密:需要两个密钥,一个叫做 公钥(pub),一个叫做私钥(pri),使用其中哪个加密,就用另一个解密即可~~

  • 明文 + pub => 密文
  • 密文 + pri => 明文

或者

  • 明文 + pri => 密文
  • 密文 + pub => 明文

3.1 使用对称密钥

客户端生成对称密钥,通过网络传输,传给服务器.

如果中间出现了黑客要盗取数据,应该怎么办? 

黑客如果没有密钥 key,此时黑客拿到密文之后,是不知道真实信息的,自然就无法篡改信息,安全性就大幅度提升了.

服务器对应的客户端,有很多个,不是只有一个,如果只有一个的话,那么黑客也可以作为其中一个的客户端,来进行盗取所有信息,所以不同的客户端,使用的密钥,是不同的!!

那么既然客户端,需要自己生成一个密钥,前面我们说了,密钥通过网络传输传给服务器!!!也就是说黑客在其中截获,黑客是知道密钥的!!!

看起来是需要针对 key 也进行加密,难道要生成一个 key2吗?使用key2 加密 key吗??那么key2也要通过网络传输,传给服务器,这样自然行不通的,就要考虑其他方法!

3.2 引入非对称加密

客户端是希望把自己的 key 安全的传输给服务器,不被黑客拿到.于是服务器生成一对非对称密钥~

首先,客户端询问服务器你的 pub公钥是啥??于是服务器将公钥通过网络传输将 pub公钥 传给服务器

这个时候黑客和客户端都拿到了公钥 pub,随后客户端使用 pub 针对 key 进行加密进行网络传输给服务器,因为黑客是没有 pri 私钥,是无法解密的,只能使用 pri 来解开 pub!!!黑客无法解密,就拿不到 对称密钥 key.

后续传输信息,客户端和服务器都拿着 客户端生成的 对称密钥key 来加密数据,进行传输,由于黑客没用拿到 对称密钥 key,自然不能篡改~~~

客户端和服务器的业务数据传输,仍然是使用对称加密的方式,(对称加密速度快,成本低),为了保证对称密钥能够安全到达服务器,引入了非对称密钥,来保护对称密钥的传输~

3.3 中间人攻击

我们说 安全是”相对的“,黑客也不是吃素的!!!于是黑客自己生成了一对非对称密钥,来进行篡改数据,这个过程叫做中间人攻击.

此时客户端还是询问服务器你的 公钥 pub 是啥?服务器返回它的 公钥 pub,但是黑客在中间截获了,将 公钥 pub 改成了自己生成的 公钥 pub2,通过网络传输给了客户端,于是客户端认为这个就是服务器的 公钥pub!!!

随后客户端 使用 公钥 pub2 来进行加密 对称密钥key 进行传输,因为是用黑客的 公钥 pub2来进行加密的,黑客自然就能使用 私钥pri2 来进行解密,于是黑客拿到了 对称密钥key,再将 key 使用 服务器的pub 来进行加密 传送给 服务器.至此,黑客就拥有了盗取客户端和服务器的数据能力,之后的信息传输都是可以被截获的.

记住,这个过程里面有五把钥匙~~~

3.4 引入证书

中间人攻击,破解的关键,就是在于让客户端信任公钥!!!

下面这里也是有五把钥匙~~

先了解一下证书,所谓证书包括了:

  1. 服务器的 url
  2. 证书的过期时间
  3. 颁布证书的机构是什么
  4. 服务器自己的公钥 pub
  5.  ...........
  6. 加密后的签名

所谓签名:就是一个校验和,针对证书的所有属性,进行计算的~~再由证书颁布机构,使用自己的私钥对于这个签名进行加密!!!

此处,我们要明确,如果数据相同,按照相同的算法计算得到的签名,也一定相同!!!

反之,如果签名不同了,说明原始的数据一定不同

在这个过程中,客户端首先去询问服务器你的证书是啥?于是服务器将证书返回给客户端~~

客户端拿到证书之后,就首先要针对证书进行校验:

  1. 得到初始的签名:客户端使用系统中内置的权威机构的 公钥 pub2,针对上述证书中的 加密签名进行解密,得到了初始签名(这个签名是权威机构算出来的)(此处设为sum1
  2. 计算现在的签名:客户端使用相同的签名计算算法,基于证书中的属性重新计算,(得到sum2
  3. 比较两个签名是否相同,如果相同,说明证书中的数据都是未被篡改的原始数据!!如果签名不同,说明证书的数据被篡改过,客户端的浏览器会弹框报错!!

此时,我们有个疑问,那么此时黑客不会进行修改服务器的公钥吗?

答案是黑客是可以的修改服务器的公钥,但是会在客户端检验签名的时候报错,此时客户端就会发现数据被篡改过,就不再进行数据传输了!!

黑客要篡改,怎么做呢?

  1. 黑客把证书中的 服务器的公钥(pub),替换成自己的公钥
  2. 黑客针对证书的各个属性,重新计算签名
  3. 黑客需要把签名,重新加密!!想要加密,就要知道权威机构的私钥(pri2),但是这个钥匙是可能知道的!!!

此处安全的关键,不是黑客”看不到“,而是黑客”改不了“

上述介绍的这一套,(对称加密 + 非对称加密 + 证书)叫做SSL或者TLS, 这一套流程,不仅仅是 HTTPS 会涉及到,其他的场景也会用到~

HTTPS = HTTP + SSL


http://www.ppmy.cn/news/104102.html

相关文章

JSON(一) -- JSON转换工具 -- Jackson的使用

目录 1. Jackson的简介: 2. JSON转换的案例 2.1 对象 => JSON && JSON=> 对象 2.2 Map => JSON && JSON=> Map

Electron-Builder Windows系统代码签名

前言 项目打包签名是两年前做的了,使用Electron-Bulder,打包工具版本迭代较少,倒是electron版本更新飞快,目前官方推荐使用Electron Forge进行打包,后续再对两者进行对比,重新整理现在的实现方案。 签名简…

【MySQL学习6:多行输入函数——聚合函数及SQL书写和执行规则】

之前做的笔记都在有道云,之后会一点点将以前的笔记分享出来~ (配图在笔记中查看) MySQL学习6:多行输入函数——聚合函数及SQL书写和执行规则 SQL书写顺序:SQL99执行顺序:一、常见的聚合函数1. 常见的聚合函…

【AI面试】降低过拟合的方式方法横评探究

对于一个“训练调参工程师”来说,在训练过程遇到过拟合现象,是常事。当然,如何降低过拟合,也是在面试过程中,经常被面试官问到的问题(没啥可问的,就只能这样问了)。以下是我们会常考…

Pytorch CIFAR10图像分类 SENet篇

Pytorch CIFAR10图像分类 SENet篇 文章目录 Pytorch CIFAR10图像分类 SENet篇4. 定义网络(SENet)SE BlockSE模块的应用summary查看网络测试和定义网络5. 定义损失函数和优化器6. 训练及可视化(增加TensorBoard可视化)开始训练训练曲线可视化损失函数曲线准确率曲线学习率曲…

IOC源码解析

目录 主要从3方面进行解析 Bean与BeanDefinition 容器初始化主要做的事情(主要脉络) BeanFactory ApplicationContext 模板方法模式 Resource、ResourceLoader、容器之间的关系 BeanDefinitionReader BeanDefinition的注册 小结 主要从3方面进行解析 解析配置定位与注…

深度学习12—VGG19实现

目录 VGG19实现 1.为数据打标签的generate_txt.py 2.对图像进行预处理的data_process.py 3.VGG19的网络构建代码net_VGG19.py 4.训练得到pth模型参数文件的get_pth_file.py 5.预测代码predict.py 6.预测VGG16与VGG19结果对比 VGG19实现 1.为数据打标签的generate_txt.p…

这个 计数排序详解过程 我能吹一辈子!!!

文章目录 计数排序概念计数排序算法思路计数排序算法过程计数排序代码实现计数排序缺陷 计数排序概念 计数排序是一个非基于比较的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。该算法于1954年由 Harold H.…