HTTPS协议之SSL/TLS详解(下)
目录
前言:
SSL/TLS详解
HTTP协议传输安全性分析
对称加密
非对称加密
证书
小结:
前言:
在网络世界中,存在着运营商劫持和一些黑客的攻击。如果明文传输数据是很危险的操作,因为我们不清楚中间传输过程中就被哪个服务器偷梁换柱了。
现在网络中大多数使用的都是HTTPS协议。HTTP协议没有加密的概念,就意味着将会进行明文传输,数据很容易就被劫持了。HTTPS协议是HTTP协议的加强版本(S就是SSL或者TLS),引入了证书的概念,很大程度上保证了数据的安全性。
SSL/TLS详解
HTTP协议传输安全性分析
注意:
明文传输,当数据经过中间黑客控制的服务器时,数据就可以直接被篡改。服务器得到的请求就是篡改后的请求。当响应经过黑客服务器时同样也可以被篡改,那么客户端和服务器所得到的数据就是黑客说了算。就不存在安全性可言。
对称加密
所谓对称加密就是:同一个密钥既可以加密也可以解密。
a(明文) + key = b(密文)
b(密文) + key = a(明文)
不同的客户端肯定要使用不同的对称密钥来对数据进行加密。那么当客户端生成对称密钥后,就需要将对称密钥和数据一起传输到服务器,服务器才能解密数据。
问题:
这次传输当经过中间黑客控制的服务器时,那么黑客也可以劫持到密钥,对数据解密进行篡改。那么我们只要解决对称密钥的传输数据就是安全的。
非对称加密
生成一对密钥,公钥和私钥。用公钥加密,私钥解密(公钥是公开的,密钥是私有的)。
明文 + 公钥 = 密文
密文 + 私钥 = 明文
注意:
服务器生成一对非对称密钥,公钥是公开的,密钥只有自己知道。客户端使用公钥对对称密钥加密传输到服务器。由于黑客控制的服务器不知道私钥,就没有办法解密。当服务器得到数据后,用私钥解密得到对称密钥。那么以后的传输就可以直接使用对称密钥对数据进行加密了。
为什么有非对称加密还要使用对称加密呢?
答:非对称加密是比较耗时,而对称加密效率高。如果每次都使用非对称加密,效率会很低。使用非对称加密将对称密钥传输到服务器后,就可以使用对称加密了。效率会有显著提升。
问题:
中间人攻击,黑客模仿服务器也生成一对公钥和密钥,发给客户端(偷梁换柱得到明文)。由于客户端的公钥也是服务器生成好传输过去的。
注意:
客户端需要发起请求得到服务器生成的公钥。服务器返回响应时说:公钥是pub1。经过黑客控制的服务器时,黑客保存pub1。并且自己也生成一对非对称密钥(pub2,pri2)。然后返回响应说:公钥是pub2。
客户端用pub2对对称密钥加密。黑客服务器收到后,使用pri2解密得到对称密钥。然后又使用之前保存的pub1加密,传输到服务器。服务器任然可以使用pri1解密。黑客神不知鬼不觉黑客就得到了对称密钥。
证书
解决中间人攻击的核心方法就是:让客户端能够辨别得到的公钥是否为服务器发来的公钥。引入一个“证书”(本质上是第三方的公证机构)。
服务器(网站)在设立之初,需要向公证机构申请证书,服务器生成的公钥也就包含在证书中。客户端向服务器不在是请求公钥了,而是把整个证书都请求过来。
客户端拿到证书后,就会对证书进行校验。验证一下证书是否是被篡改过的(证书中存在一个加密的签名)。如果证书是无效的,浏览器就会直接弹窗告警。
注意:
服务器在建立时向认证机构申请证书(提交一些信息,包含公钥),认证机构就会向服务器颁发证书,包含认证机构用自己私钥加密的签名。客户端向服务器请求证书就会获得证书(包含公钥)。
客户端用认证机构提供的公钥解密签名进行校验(校验的过程类似tcp/udp校验和)。签名是根据证书中内容来生成的,客户端得到数据后,重新根据数据计算一次签名,与之前的签名进行对比。辨别数据是否被篡改。
黑客如果把证书中的公钥篡改了,客户端计算的签名就会和证书中的签名不一致。黑客根据自己的算法重新生成签名(把签名篡改了)。由于黑客不知道认证机构的私钥,就算生成了也无法加密。黑客直接模仿认证机构重新生成证书,也由于黑客不知道认证机构的私钥,无法生成。
整个过程就类似于我们使用身份证来证明身份,警察局就是第三方认证机构。这个身份证无法被别人生成,别人就可以通过身份证来辨别我们的身份。
小结:
理解HTTPS协议的加密过程,当我们使用其协议时就会比较得心应手了。
相关文章:

HTTPS协议之SSL/TLS详解(下)
目录 前言: SSL/TLS详解 HTTP协议传输安全性分析 对称加密 非对称加密 证书 小结: 前言: 在网络世界中,存在着运营商劫持和一些黑客的攻击。如果明文传输数据是很危险的操作,因为我们不清楚中间传输过程中就被哪…...

OLE对象是什么?为什么要在CAD图形中插入OLE对象?
OLE对象是什么?OLE对象的意思是指对象连接与嵌入。那为什么要在CAD图形中插入OLE对象?一般情况下,在CAD图形中插入OLE对象,是为了将不同应用程序的数据合并到一个文档中。本节内容小编就来给大家分享一下在CAD图形中插入OLE对象的…...

【微信小程序】-- 自定义组件 -- 数据、方法和属性(三十三)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
【Spring 深入学习】AOP的前世今生之代理模式
AOP的前世今生之代理模式1. 概述 什么是代理模式呢??? 在不修改原有代码 或是 无法修改原有代码的情况下,增强对象功能,替代原来的对象去完成功能,从而达成了拓展的目的。 先给大家看下 JavaScript中实现方…...

操作系统复试
2017软学 给出操作系统的定义,分别从资源管理,任务调度,用户接口等三个方面论述操作系统的职能 操作系统是位于硬件层之上、所有其他系统软件层之下的一个系统软件,使得管理系统中的各种软件和硬件资源得以充分利用,方…...

藏经阁(五)温湿度传感器 SHT3x-DIS 手册 解析
文章目录芯片特性芯片内部框图芯片引脚定义芯片温湿度范围芯片寄存器以及时序讲解信号转换公式芯片特性 湿度和温度传感器完全校准,线性化温度补偿数字输出供电电压范围宽,从2.4 V到5.5 VI2C接口通讯速度可达1MHz和两个用户可选地址典型精度 2% RH和 0.…...

PCB焊盘设计基本原则
SMT的组装质量与PCB焊盘设计有直接的关系,焊盘的大小比例十分重要。如果PCB焊盘设计正确,贴装时少量的歪斜可以再次回流焊纠正(称为自定位或自校正效应),相反,如果PCB焊盘设计不正确,即使贴装位置十分准确,…...

mysql锁分类大全
前言 为什么会出现锁 MySQL中的锁是为了保证并发操作的正确性和一致性而存在的。 当多个用户同时对同一份数据进行操作时,如果不加控制地进行读写操作,就可能导致数据不一致的问题。例如,当多个用户同时对同一行数据进行写操作时ÿ…...

推荐几款主流好用的远程终端连接管理软件
一、介绍 远程终端连接管理软件是管理服务器、虚拟机等远程计算机系统不可或缺的工具之一,它可以通过网络连接到另一台计算机,以执行命令、编辑文件或进行其他管理任务,下面我将为大家介绍几款主流好用的远程终端连接管理软件,并…...

描述性统计
参考文献 威廉 M 门登霍尔 《统计学》 文章目录定性数据的描述方法条形图饼图帕累托图定量数据点图茎叶图频数分布直方图MINITAB 工具在威廉《统计学》一书将统计学分为描述统计学和推断统计学,他们的定义分别如下:描述统计学:致力于数据集的…...

第十四届蓝桥杯三月真题刷题训练——第 7 天
目录 第 1 题:三角回文数 问题描述 答案提交 运行限制 代码: 第 2 题:数数 问题描述 答案提交 运行限制 代码: 第 3 题:倍数问题_同余定理_分情况讨论 题目描述 输入描述 输出描述 输入输出样例 运行限…...

剑指 Offer 57. 和为s的两个数字
一、题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 示例 1: 输入:nums [2,7,11,15], target 9 输出:[2,7] 或者 [7…...

PDF转word在线转换方法!操作简单又高效
相信很多已经工作的人都知道,PDF文件格式的优点在于兼容性强、安全性高,而且查看和传输给他人都很方便。但是,这种格式的文件也有不太方便的地方,那就是不能对文件内容进行编辑和修改。对于许多人来说,如果想要编辑修改…...

Jquery项目中使用vue.js
大家在工作的情况中,可能会遇到之前的老项目采用jq书写,或者修改或者新增功能在jq中,原始jq的项目,代码可维护性很差,一个页面几千行jq,可维护性很差,工作量巨大,所以这个时候大家可以引入vue.js。 第一步:引入vue.js…...
蓝桥杯 删除字符
题目描述 给定一个单词,请问在单词中删除 t 个字母后,能得到的字典序最小的单词是什么? 输入描述 输入的第一行包含一个单词,由大写英文字母组成。 第二行包含一个正整数 t。 其中,单词长度不超过 100,…...
析构函数 对象数组 对象指针
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章 🔥座右铭:“不要等到什么都没有了,才下定决心去做” …...

Vue对Axios网络请求进行封装
一、为什么要对网络请求进行封装? 因为网络请求的使用率实在是太高了,我们有的时候为了程序的一个可维护性,会把同样的东西放在一起,后期找起来会很方便,这就是封装的主要意义。 二、如何进行封装? 1、将…...
Android framework HAL(HIDL)
简述 当你在Android系统中使用不同的硬件设备(例如摄像头、传感器、音频设备等)时,你需要与硬件抽象层(HAL)进行通信。 HAL是一个中间层,它充当了硬件和应用程序之间的桥梁。但是,由于硬件设备…...

QML 模型(ListModel)
LIstModel(列表模型) ListModel 是ListElement定义的简单容器,每个定义都包含数据角色。内容可以在 QML 中动态定义或显式定义。 属性: count模型中数据条目的数量dynamic动态角色,默认情况下,角色的类型…...

你还在调戏AI,有的公司已经用ChatGPT开展业务了
近日,OpenAI 正式宣布开放 ChatGPT 和 Whisper 两个模型的 API,API 版本的ChatGPT 不仅功能更多、性能更强,而且还更便宜一一相当于目前 GPT-3 模型价格打一折!划重点OpenAl正式开放 ChatGPT 和 Whisper 模型的 API,目前 SnapChat…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...