HTTPS协议深入理解

news2024/9/29 21:21:45

  • 博主简介:想进大厂的打工人
  • 博主主页:@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.coloradmin.cn/o/586000.html

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

相关文章

【chatGPT4结对编程】chatGPT4教我做图像分类

开始接触深度学习 大语言模型火了之后,我也想过是否要加入深度学习的行业当中来,一开始的想法就是AI大模型肯定会被各大厂垄断,我们作为普通应用型软件工程师直接调用api就完事,另外对自己的学历也自卑(刚刚够线的二本&#xff0…

2.4. 封装与访问控制

封装(Encapsulation)是面向对象编程的一个核心概念,它意味着将数据(属性)和方法(操作数据的函数)捆绑在一起,形成一个类(Class)。封装的目的是将数据和操作数…

C++插件管理类(下)——实际项目(阉割版)

文章目录 一、背景二、代码结构三、两个CMakeLists.txt3.1 父目录3.2 子目录src 四、代码实例4.1 main.cpp4.2 Plugin.h4.3 Plugin.cpp4.4 Comm.h4.5 calc.cpp 五、 踩坑点 一、背景 请参考C插件管理类(上) 二、代码结构 三、两个CMakeLists.txt 3.1 父目录 #设置cmake的最…

stackqueue的模拟实现

stack模拟: stack的源代码: stack的全部源代码就这些。 stack的代码少,原因在于采用了适配器模式,所谓适配器,以电器为例,每个电器都有电源适配器,中国的家用电源为220V的交流电,但是…

3d虚拟主播形象能提升提升企业销售额

随着科技的不断进步和发展,虚拟人形象正在被广泛地应用于商业宣传中。3D虚拟人形象是指采用计算机图形学、人工智能等技术,模拟真实人类形象的虚拟形象。相比于传统产品营销方式,采用3D虚拟人形象进行产品交互讲解对提升企业销售额具有很多优…

JavaWeb12(实现基础分页模糊查询的分页)

目录 一. 效果预览 ​编辑 二. 实现基本分页 2.1 分页sql --每页3条 取第二页 --由于伪列不能作用与大于符号也不能作用于between....and --因此需要将伪列----->名列 2.2 万能公式 2.3 首页&上一页&下一页实现 ②前端代码 2.4 末页实现&优化 ①底层代…

目标检测复盘 -- 6. YOLOv4

Backbone YOLOv4的骨干是CSPDarknet53 CSP结构的作用:1. 增强CNN的学习能力 2. 移出计算瓶颈 3. 减少内存开销 CSP首先将输入的特征层分成两个部分,这里以densenet为例,part2分支经过denseblock后,进过一个transition&#xff0c…

Redis之高可用方案浅析

在工程项目中,系统应用的高可用性越来越重要,业主越来越重视。其实高可用可以分为应用层高可用和数据层高可用,数据层高可用中常见的有关系型数据库mysql的高可用、非关系型NoSQl数据库redis的高可用等,下面聊聊典型的NoSQL数据库…

C# 事件和委托的区别并说明

1.区别 事件是基于委托的,为委托提供了一个发布/订阅机制。可以说事件是一种特殊的委托,他的调用和委托是一样的。 事件的声明 public event 委托类型 事件名称 通常事件的命名以事件名称Event来命名。如public event delegate NotifyEvent; 事件和委…

C++ Primer Plus 第二章习题

目录 复习题 1.C程序的模块叫什么? 2.#include 预处理器编译指令的用处? 3.using namespace std; 该语句是干什么用的? 4.什么语句可以打印一个语句"hello,world",然后重新换行? 5.什么语句可以用来创…

桂院校园导航 导入 与 配置教程

将 静态项目/云开发项目 文件夹下最新版本的 文件夹下的 项目 的整个文件夹 复制到项目路径下(比如 D:\WeChatProjects),强烈建议不要直接扔在桌面上 云开发项目 需开通 云开发 功能(首月免费,次月19.9)&am…

【论文阅读笔记】CRFL: Certifiably Robust Federated Learning against Backdoor Attacks

个人阅读笔记,如有错误欢迎指出! 会议:PMLR 2021[2106.08283] CRFL: Certifiably Robust Federated Learning against Backdoor Attacks (arxiv.org) 问题: 现有的防御算法缺乏健壮性 创新: 证明了所提出框架得稳定性 通过马尔…

Generative AI 新世界 | 走进文生图(Text-to-Image)领域

在之前的四篇 “Generative AI 新世界” 中,我们带领大家一起探索了生成式 AI(Generative AI),以及大型语言模型(LLMs)的全新世界概览。并在文本生成(Text Generation)领域做了一些概…

javascript基础十:说说你对Javascript中this对象的理解

一、定义 函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别 在绝大多数情况下,函数的调用方式决定了 this 的值(运行时绑定) this 关键字是函数运行时自动生成的一…

进程控制与进程调度 —— 时间片轮转调度算法(C++版)

目录 实验一 进程控制与进程调度 一、实验目的 二、实验内容 三、数据结构及符号说明 四、运行环境说明 五、代码段 六、 效果展示 实验一 进程控制与进程调度 备注:大二(下)操作系统实验一 一、实验目的 掌握进程状态的转变、…

多次调用java.awt.Toolkit.getDefaultToolkit方法获得是同一个单例的Toolkit

多次调用java.awt.Toolkit.getDefaultToolkit方法获得是同一个单例的Toolkit java.awt.Toolkit.getDefaultToolkit()import java.awt.Toolkit;public class 多次调用Toolkit的getDefaultToolkit方法获得是同一个单例的Toolkit {static public void main (String...arguments)t…

WMS:系统窗口添加过程

WMS:系统窗口添加过程 1、经常使用的两大类窗口2、系统窗口StatusBar2.1 StatusBarWindowView添加流程2.2 简要时序图 android12-release 1、经常使用的两大类窗口 Android中的“窗口”类型有很多,经常使用的“窗口”大致分为两大类:一是,由系…

对于后端Linux的入门知识

为什么使用Linux 文章来自https://librehunt.org/,在这个网站里,你可以根据它提供的选项,最终选出适合你的Linux版本 It’s safe and private. No tracking. No company watching over you, no “big brother is watching you” nonsense. Ju…

article-三自由度机械臂运动学分析+仿真

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rOmeEm3I-1685366971102)(data:image/svgxml;utf8, )] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCu0JrBB-1685366971103)(data:image/svgxml;utf8, )] 建立坐标系 1…

ROS:创建工作空间和编译功能包

目录 一、工作空间二、创建工作空间三、编译空代码的工作空间四、功能包五、创建功能包六、设置和检查环境变量七、功能包中的两个重要文件 一、工作空间 存放工程开发相关文件的文件夹。类似一个IDE(例如Pycharm)新建一个工程,就是一个工作…