HTTPS协议原理

文章目录

    • 1. 什么是https
    • 2. 什么是加密
    • 3. 为什么要加密
    • 3. 常见的加密方式
      • 3.1 对称加密
      • 3.2 非对称加密
    • 4. 数据指纹
    • 5. https工作过程
      • 5.1 加密方案
      • 5.2 引入证书
      • 5.3 完整流程

1. 什么是https

网络协议栈当中,传输层和网络层是在操作系统内部,应用层的请求是交给了传输层,而操作系统不管对数据的加密,只负责如何进行数据传送问题。

http协议中,用户的请求、响应、提交参数这些用户信息都是在http协议的请求当中,然后http向下交付,此时如果中间有人要读取我们的信息,是能够直接拿到的,这是不安全的。

于是便有人在应用层添加了一层软件层:ssl加密解密层,发送的请求通过加密再交付,那么在这个中间(操作系统、网络)就不知道传输的是什么数据,只有服务端和客户端的应用层才知道。

ssl这种加密解密协议,都是外部标准组织规范的

image-20240316155429685

以上就是https协议,基于http在应用层封装了一个软件层,http的要发送的内容,先交给软件层加密,然后再发给操作系统。

层和层之间是解耦的,每层只需要知道要发送的是什么东西即可

是否有绝对安全的网络协议?

无论怎样的加密解密方式,随着时代的进步和算力的进步,总会发现漏洞,所以没有绝对安全的网络协议。

那该如何看待网络协议的安全呢?攻破的成本 > 攻破的收益

2. 什么是加密

加密就是把明文(所需传输的信息)通过一系列的转换变成密文;

解密就是把密文(收到的信息)再通过一系列的转换变成明文;

在这个过程当中,还需要一些数据来辅助加密,这样的数据叫做密钥(yuè)。

例如:

密文:这几天心情不是很好因为女朋友感情有了一点问题,真苦脑啊

密钥:加黑字体

明文:我心情很好,因为女朋友有了

3. 为什么要加密

image-20240316163035296

我们发起的网络请求,都是要通过中间人进行转发的,如果我们发送的请求是明文,且这个个中间人不靠谱(例如:商场免费的WIFI),那么中间人就可以拿到我们所有的数据,这是十分不安全的。

所以需要进行加密来对数据进行保护!

3. 常见的加密方式

3.1 对称加密

所谓的对称加密,即对明文加密和密文解密使用一个密钥,例如:

int main()
{
	int plaintext = 2024;
	int key = 999;
	int ciphertext = plaintext ^ key;
	int decode = ciphertext ^ key;
	cout << "明文: " << plaintext << endl;
	cout << "密钥: " << key << endl;
	cout << "密文: " << ciphertext << endl;
	cout << "解密: " << decode << endl;
}

对称加密的优势:

算法公开、计算量小、加密速度快、效率高

3.2 非对称加密

非对称加密:需要2个密钥来进行加密和解密,密钥a加密的数据可以通过密钥b进行解密;密钥b加密的数据也可以通过密钥a解密

一般2个密钥可以公开一个,这个公开的叫做公钥,另一个不公开的私钥。

用公钥加密,只能私钥解密

4. 数据指纹

数据指纹的基本原理是利用哈希函数对信息进行运算,生成固定长度的字符串(具有唯一性),这相当于数据的一个身份证

**场景1:**登录网站用户名+密码在这个网站上是唯一的,但是不能将这个数据直接写给用户,此时就能通过哈希运算形成一个数据指纹,这就是cookie

场景2:

百度网盘秒传原理

image-20240316175016622

5. https工作过程

5.1 加密方案

方案一:只使用对称加密

服务器是给客户端提供服务,客户端必须要有密钥,但是服务器和客户端的对应关系是1:n的,如果采用相同的密钥,那么在庞大的客户端当中,就可能有黑客拿到密钥

image-20240316181158084

方案二:只使用非对称加密

image-20240316181322185

方案三:双方使用非对称加密

image-20240316182351726

非对称加密的劣势就是效率较低,都使用非对称加密,那效率就更低了

方案四:非对称+对称加密

image-20240316184253727

协商阶段采用非对称,之后都是采用对称

这种方案看似很安全,效率也较高,解决了上面这几种方案的不足,但它就真的安全了吗???

MITM攻击(Man-in-the-MiddleAttack):

image-20240316191058670

5.2 引入证书

上面的中间人攻击的问题就是,无法鉴别服务端发来是公钥是否合法

CA认证:

我们国家的公民都是有身份证的,这个身份证不是由家庭、学校、工作单位制作,而是由政府登记(具有权威性)制作。

对于https,在使用之前需要向权威机构——CA机构申领一份数字证书(数字签名),证书里面包含证书申请者信息、公钥信息等。

服务器将证书传给浏览器,浏览器从证书里面读取公钥即可。

申请证书流程:

image-20240316201405669

在线生成.csr文件:CSR在线生成工具

如何理解证书是否会被替换?

CA机构内部会有公钥和私钥,先将用户的数据通过散列函数形成固定长度字符串,然后通过自己的私钥加密这个散列字符串。

在服务器内部会内置很多权威机构的公钥,然后用这些公钥来解密即可检查证书是否可信,如果解密成功,就代表这这个证书一定是CA机构颁发的,反之不是。

image-20240316203919073

方案五:非对称+对称加密+证书认证

image-20240316204934906

中间人是否可以篡改证书?

  • 中间人篡改证书的明文,但由于没有CA机构的私钥,所以无法哈希之后使用私钥形成签名,那么就没办法对篡改后的证书进行签名
  • 如果强行篡改,客户端收到之后对明文和签名解密,发现数据摘要不一致,则表面证书不可信,会终止向服务器发信息

中间人掉包整个证书

如果中间人将整个证书掉包,又要没有CA的私钥,只有用自己申请的真证书,但是证书的明文里面包含了要访问的域名和一些认证信息,这就相当于名牌打了,客户端会识别出来,如果是恶意行为,👮‍叔叔可能会根据信息找到个人/组织

为什么签名不直接加密,而要先采用hash形成摘要?

主要是为了缩小密文的长度,然后加快数字签名的验证签名运算速度

5.3 完整流程

image-20240316211426215

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多站合一的音乐搜索下载助手PHP源码l亲测

源码获取方式 回复&#xff1a;031601 搭建教程&#xff1a; 将源码下载上传至宝塔面板&#xff0c;直接运行即可~ 说明&#xff1a; 该源码进行测试&#xff0c;测试成功源码无加密优化相关其他采集问题。

MySQL语法分类 DQL(1)基础查询

//语法 select 字段列表 from 表名列表 where条件列表 group by分组字段 having 分组后的条件 order by排序 limit 分页限定为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),ma…

白话模电:3.三极管(考研面试与笔试常考问题)

一、三极管的简单判断 1.判断三极 1)给了图 左边是b,有箭头是e,剩下是c 2)给了电位 b:中间值&#xff0c;e:较近值(离中间值)&#xff0c;c:较远值(离中间值) 2.判断流向 bc同向(共同流向“|”或共同流离“|”)&#xff0c;e与bc反向 3.判断材料 4.判断类型 5.判断能否构…

261:vue+openlayers 使用setRotation旋转地图

第261个 点击查看专栏目录 本示例介绍演示如何在vue+openlayers中使用setRotation旋转地图。setRotation是view的一个方法,旋转的内容是弧度,这里设置的角度需要将其换算为弧度,即 x*Math.PI/180. 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目…

分享一篇Oracle RAC实战安装11G

分享一次很久以前的Oracle rac项目实施。 1、拓扑结构 基础环境是2台H3C的服务器2台3PAR的双活存储&#xff0c;操作系统centos7.2。借用下别人家的拓扑先&#xff08;这是一套典型的RAC架构&#xff09;。 2、网卡TEAM操作 以eno51和en052组成Team1组为示例&#xff1a; nm…

Tengine编译安装

首先下载源码 可以去官网&#xff1a;The Tengine Web Server 当前最新版地址&#xff1a;https://tengine.taobao.org/download/tengine-3.1.0.tar.gz 安装编译依赖 yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel \libxslt-devel gd-devel GeoIP…

如何在Windows系统搭建Emby影音平台并实现远程访问本地文件【内网穿透】

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

AI - 支持向量机算法

&#x1f9e8;概念 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种强大的机器学习算法&#xff0c;主要用于解决二分类问题。 SVM的核心思想是找到一个超平面&#xff0c;这个超平面能够最好地将数据分为两类&#xff0c;即在保证分类准确的情况下&am…

android studio 连接mumu模拟器调试

1、打开mumu模拟器 2、在Android Studio 中 控制台 cd 到 sdk 目录下 platform-tools 文件夹&#xff0c;有一个adb.exe 可运行程序 一般指令&#xff1a; adb connect 127.0.0.1:7555 但是这个执行在window环境下可能会报错 解决方法是在 adb 之前加 ".\", 问题…

大模型学习笔记(一):部署ChatGLM模型以及stable-diffusion模型

大模型学习笔记&#xff08;一&#xff09;&#xff1a;部署ChatGLM模型以及stable-diffusion模型 注册算力平台&#xff08;驱动云平台&#xff09;1.平台注册2.查看算力3.进入平台中心 部署ChatGLM3-6B模型1.创建项目2.配置环境设置镜像源、克隆项目修改requirements 3.修改w…

Hive SQL必刷练习题:同时在线人数问题(*****)

问题描述&#xff1a; 思路&#xff1a; ​ 因为有进直播间时间&#xff0c;和出直播间人数。所以我可以统计&#xff0c;进来一个是不是人数就会加1&#xff0c;出去一个&#xff0c;人数就会减1。 ​ 所以可以给进直播间的时间标记一个1&#xff0c;出直播间的时间标记一个…

柚见第十二期(随机匹配)

随机匹配 目的 为了帮大家更快地发现和自己兴趣相同的朋友 问题 匹配 1 个还是匹配多个&#xff1f; 答&#xff1a;匹配多个&#xff0c;并且按照匹配的相似度从高到低排序 怎么匹配&#xff1f;&#xff08;根据什么匹配&#xff09; 答&#xff1a;标签 tags 还可以根据 us…

【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!

代码和示例数据下载 前言 在这篇文章中&#xff0c;我们将会可视化 《七版方剂学》 的药材的关系&#xff0c;我们将使用Python制作节点和边的数据&#xff0c;然后在Gephi中绘制出方剂的网络图。 Gephi是一个专门用于构建网络图的工具&#xff0c;只要你能提供节点和边的数…

Microsoft Word 符号 / 特殊符号

Microsoft Word 符号 / 特殊符号 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2References 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

Android FrameWork 学习路线

目录 前言 学习路线&#xff1a; 1.基础知识 2、AOSP 源码学习 3. AOSP 源码编译系统 4. Hal与硬件服务 5.基础组件 6. Binder 7. 系统启动过程分析 8. 应用层框架​编辑 9. 显示系统 10. Android 输入系统 11. 系统应用 前言 Android Framework 涉及的行业相当广…

SpringAI——Java生态接入LLM

最近&#xff0c;Spring官网发布了SpringAI&#xff0c;可点此查看https://spring.io/blog/2024/03/12/spring-ai-0-8-1-released&#xff0c;对于SpringAI的介绍&#xff0c;可看官方文档&#xff1a;https://spring.io/projects/spring-ai#overview。 本文将使用SpringAI配合…

Linux内核有什么之块设备驱动有什么第四回 —— 邂逅的三个文件系统之二:实际文件系统(1)

接前一篇文章&#xff1a;Linux内核有什么之块设备驱动有什么第三回 —— 邂逅的三个文件系统之一&#xff1a;devtmpfs 本文内容参考&#xff1a; 34 | 块设备&#xff08;上&#xff09;&#xff1a;如何建立代理商销售模式&#xff1f;-趣谈Linux操作系统-极客时间 Linux内…

vscode通过多个跳板机连接目标机(两种方案亲测成功)

1、ProxyJump&#xff08;推荐使用&#xff09; 需要OpenSSH 7.3以上版本才可使用&#xff0c;可用下列命令查看&#xff1a; ssh -V ProxyJump命令行使用方法 ssh -J [email protected]:port1,[email protected]:port2 一层跳板机&#xff1a; ssh dst_usernamedst_ip -…

【Spring 篇】SpringMVC拦截器:给你的应用增添色彩

嗨&#xff0c;亲爱的小伙伴们&#xff01;欢迎来到这段关于SpringMVC拦截器的奇妙之旅。今天我们要一探究竟&#xff0c;深入挖掘拦截器的神秘面纱&#xff0c;看看它是如何在你的应用中悄然发挥作用的。别怕&#xff0c;我会用最通俗易懂的语言&#xff0c;一步一步带你走进这…

Python之requests实现github模拟登录

文章目录 github 模拟登录前言模拟登录流程抓包操作查看登录表单的内容登录操作 模拟登录操作在 main函数的调用获得 auth_token调用/session接口登录处理检测登录是否成功 总结&#xff1a; github 模拟登录 前言 前面学习了requests模块的基础学习后&#xff0c;接下来做一个…