HTTPS,SSL(对称加密和非对称加密详解)
上一篇博客(HTTP详解_徐憨憨!的博客-CSDN博客)详细讲解了关于HTTP的知识,了解到HTTP协议下的数据传输是一种明文传输,既然是明文传输,可能导致在传输过程中出现一些被篡改的情况,此时就需要对所传输的数据进行加密,达到数据安全的效果,所以在HTTP协议的基础上引入了另一种应用层协议——HTTPS协议(升级版的HTTP协议)!
一,HTTP中的“运行商劫持”问题
我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),由于是明文传输,那么我们的数据对于运营商网络设备来说就是公开的,运营商的网络设备就可以解析出传输的数据内容,从而进行数据篡改,如图所示:

不止运营商可以劫持,其他黑客也可以用类似的手段进行劫持,来窃取用户隐私信息或者篡改内容,如果黑客在用户登录支付宝的时候获取到用户账户余额,甚至获取到用户的支付密码,后果不堪设想,所以明文传输是比较危险的事情!
二,HTTPS
HTTPS的加密
1.概念
为了避免HTTP协议明文传输数据的危险,HTTPS协议在HTTP协议的基础上进行了加密,进一步的来保护用户的信息安全。
2.加密
加密就是把明文(要传输的信息)进行一系列变换,变成密文
解密就是把密文再进行一系列变换,还原成明文
在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥!
2.HTTPS的工作过程
既然要保证数据的安全,就需要进行“加密”,网络传输中不再直接传输明文了,而是加密之后的“密文”,加密的方式有很多,但是整体可以分成两大类:对称加密和非对称加密!
对称加密
对称加密其实就是通过同一个“密钥”,把明文加密成密文,并且也能把密文解密成明文
一个简单的对称加密, 按位异或
假设明文 a = 1234, 密钥 key = 8888
则加密 a ^ key 得到的密文 b 为 9834.
然后针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234.
(对于字符串的对称加密也是同理, 每一个字符都可以表示成一个数字)
当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使用按位异或,HTTPS中更复杂

引入对称加密后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真是内容是什么了,但是密钥从何而来呢?服务器还是客户端呢?假设客户端生成一个密钥,此时客户端就需要把密钥告知服务器:

客户端生成密钥发送给服务器,由于密钥刚刚生成,服务器还不知道,密钥只能明文传输,此时密钥可能就被黑客给截获了,一旦黑客获取到了密钥,后续对传输的数据进行加密操作都可以被黑客解密,因此密钥的传输也必须加密传输!
但是要想对密钥进行对称加密,就仍然需要先协商确定一个“密钥的密钥”,这就变成了“无限套娃”的问题了,此时密钥的传输就不也可以用对称加密,就需要引入非对称加密!
非对称加密
非对称加密要用到两个密钥,一个叫做“公钥”,一个叫做“私钥”;
公钥和私钥是配对的,最大的缺点就是运算速度非常慢,比对称加密要慢很多。
通过公钥对明文加密, 变成密文;
通过私钥对密文解密, 变成明文.
反过来也可以:
通过私钥对明文加密, 变成密文;
通过公钥对密文解密, 变成明文.

客户端在本地生成对称密钥,通过公钥加密,发送给服务器;
由于中间设备密钥私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥;
服务器通过私钥解密,还原出客户端发送的对称密钥,并且使用这个对称密钥加密给客户端返回的响应数据;
后续客户端和服务器的通信都只用对称加密即可,由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥,即使截获数据也没有意义;
由于对称加密的效率非常比非对称加密高很多,因此只是开始阶段协商密钥的时候使用非对称加密,后续的传输操作让然使用对称加密.
现在的加密方式还存在一个小问题:
客户端如何获取到公钥?
客户端如何确定这个公钥不是黑客伪造的?
引入证书
在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书,这个证书包含了刚才的公钥,也包含了网站的身份信息.

当客户端获取到这个证书之后,会对证书进行校验(防止证书是伪造的)
判定证书的有效期是否过期;
判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构);
验证证书是否被篡改:从系统拿到证书发布机构的公钥,对签名解密,得到一个hash值(称为数学摘要),设为hash1,然后计算整个证书的hash值,设为hash2,对比hash1和hash2是否相等,如果相等,则说明证书是没有被篡改过.
总结
HTTPS工作过程涉及到的密钥有三组:
第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公
钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的
签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过;
第二组(非对称加密): 用于协商生成对称加密的密钥. 服务器生成这组 私钥-公钥 对, 然后通过证书把公钥
传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密
获取到对称加密密钥;
第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.
其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的:
第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器;
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥.
相关文章:

HTTPS,SSL(对称加密和非对称加密详解)
上一篇博客(HTTP详解_徐憨憨!的博客-CSDN博客)详细讲解了关于HTTP的知识,了解到HTTP协议下的数据传输是一种明文传输,既然是明文传输,可能导致在传输过程中出现一些被篡改的情况,此时就需要对所…...
【数据结构】还不懂算法复杂度?一文带你速解
前言:前面我们已经系统的学完C语言的相关知识,现在我们已经较为熟练的掌握了C语言中的各中代码语法和结构使用,能够使用代码来解决一些简单问题。但是对于一个程序员来说,仅仅会语法是远远不够的,从今天开始,我们将进入…...

案例描述:update中,MySQL inner join 和 left join的区别,小结果集驱动大结果集
场景描述 以一个场景为例: 单据A:下游子表 (数据量级小) 单据B:下游主表(数据量级小) 单据C:中游子表(数据量级小) 单据D:中游主表(…...
CF1784D Wooden Spoon
CF1784D Wooden Spoon 题目大意 有2n2^n2n个人,进行nnn轮比赛。比赛的图是一棵完全二叉树。编号小的人一定能赢编号大的人,如果一个人满足: 第一次比赛被打败打败这个人的人在第二次比赛中被打败打败上一个人的人在第三次比赛中被打败…\d…...

【数据结构】栈
文章目录😺前言栈初始化栈顶入栈栈顶出栈栈体判空栈的数据个数获取栈顶元素栈的销毁整体代码😼写在最后😺前言 👻前面我们学习了链表,总算是跨过一个台阶了,本章带大家轻松一波,领悟一下栈的魅力…...

C++单继承和多继承
C单继承和多继承继承单继承写法继承中构造函数的写法写法构造和析构的顺序问题多继承继承 1.继承,主要是遗传学中的继承概念 2.继承的写法,继承中的权限问题 3.继承中的构造函数的写法 继承:子类没有新的属性,或者行为的产生 父类…...

金三银四,今年企业招聘如何?
又是一年求职季,互联网人找工作,和找对象一样严谨,不随便放手更不随便牵手。于是挑挑拣拣,最后的结果可能就是把自己挑剩下了。 时间已经悄然滑进3月中旬,多少无处安放的青春,还没尘埃落定?优秀…...
数字信号处理:滤波、频谱
一、滤波算法 应该说数字滤波器可以有效减小50Hz工频的干扰,完全消除是不可能的。以20ms为最小单位的整倍数周期滤波,可以有效减少工频的干扰。 软件中构建 IIR 陷波或者 FIR 带阻 数字滤波器,消除工频干扰对测量结果的影响。 1. 自适应滤波 …...

C#等高级语言运行过程
C#等高级语言运行流程:假设您编写了一个 C# 程序并将其保存在一个称为源代码的文件中。特定于语言的编译器将源代码编译成 MSIL(Microsoft 中间语言),也称为 CIL(通用中间语言)或 IL(中间语言&a…...

如何优雅的用POI导入Excel文件
在企业级项目开发中,要经常涉及excel文件和程序之间导入导出的业务要求,那么今天来讲一讲excel文件导入的实现。java实现对excel的操作有很多种方式,例如EasyExcel等,今天我们使用的是POI技术实现excel文件的导入。POI技术简介1.P…...

【AI 工具】文心一言内测记录
文章目录一、申请内测二、收到内测邀请三、激活内测四、开始使用1、普通对话2、生成图片3、生成代码4、写剧本5、生成小说五、问题反馈一、申请内测 到 https://yiyan.baidu.com/welcome 页面 , 点击 " 开始体验 " 按钮 , 申请试用 ; 申请时 , 需要填写相关信息 ; 主…...

Github的使用
Github Date: March 8, 2023 Sum: Github的使用 Github 了解开源相关的概念 1. 什么是开源 2. 什么是开源许可协议 开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议( Open Sou…...

抽丝剥茧还原真相,记一次神奇的崩溃
作者:靳倡荣 本文详细回放了一个崩溃案例的分析过程。回顾了C多态和类内存布局、pc指针与芯片异常处理、内存屏障的相关知识。 一、不讲“武德”的崩溃 1.1 查看崩溃调用栈 客户反馈了一个崩溃问题,并提供了core dump文件,查看崩溃调用栈如下…...

学习笔记八:docker资源配额
docker容器控制cpudocker容器控制cpu指定docker容器可以使用的cpu份额两个容器A、B的cpu份额分别为1000和500,结果会怎么样?给容器实例分配512权重的cpu使用份额总结CPU core核心控制扩展:服务器架构CPU配额控制参数的混合使用cpuset-cpus和c…...

小米10s格机修复 nv报错案例解析 关于基带分区的一些常识
前面分享过几期关于基带 diag端口与qcn相关的几篇帖子。其中一位粉丝朋友联系我。他的机型因为误格机导致手机进不去系统,反复进入官方rec报错nv损坏。进不去系统。 有兴趣的朋友可以参阅我的几个帖子,只是个人的一些片面理解。 基带相关贴; 安卓玩机…...

【3.17】MySQL索引整理、回溯(分割、子集问题)
3.1 索引常见面试题 索引的分类 什么是索引? 索引是一种数据结构,可以帮助MySQL快速定位到表中的数据。使用索引,可以大大提高查询的性能。 按「数据结构」分类:Btree索引、Hash索引、Full-text索引。 InnoDB 存储引擎创建的聚簇…...

转解疑难杂症,详解vector迭代器失效和深浅拷贝的问题
前文http://t.csdn.cn/kVeVX——vector模拟实现本篇文章主要是针对vector中的两个比较经典的问题同时也是上一篇文章遗留下来的问题进行详细解释,第一个就是迭代器失效的问题,第二个是深浅拷贝的问题。ps:注意本文演示用的代码是上一篇vector…...

质量工具之头脑风暴法
云质QMS原创 转载请注明来源 作者:王洪石 1. 什么是头脑风暴法 头脑风暴最早是精神病理学上的用语,指的是精神病患者的精神错乱状态,后来拓展为无限制的自由联想和讨论,其目的在于产生新创意、激发新设想,或通过找到新…...

【3】核心易中期刊推荐——人工智能计算机仿真
🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…...

vFlash软件简介
🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...