当前位置: 首页 > news >正文

HTTPS 的加密流程

HTTPS 的加密流程

  • .
  • 对称加密
  • 非对称加密
  • 中间人攻击
  • 引入证书

.

在这里插入图片描述

对称加密

最简单的保护http里面数据的安全,就是引入对称密钥,即针对传输的数据(http的header和body)进行加密
对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文.

在这里插入图片描述
黑客手里截获到的数据,是加密后的数据,黑客手里没有对称密钥,就无法进行解密
但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必
须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端
和每个密钥之间的关联关系, 这也是个很麻烦的事情~
比较理想的做法, 就是能在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥~
这里的每个客户端,都需要有一把自己的对称密钥,不同客户端的密钥也要不同
如果客户端生成了密钥,就需要把密钥传输给服务器,但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了
在这里插入图片描述
此时,如上图,黑客就能轻易的获取到密钥的内容了,黑客就可以通过密钥将密文给解密,得到真正的明文,后续使用这个密钥加密传输,传输的数据还是能被黑客截获
因此密钥的传输也必须加密传输!显然,对密钥的加密就不能使用对称加密了,那么我们就需要引入一个非对称加密

非对称加密

非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”.
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多
通过公钥对明文加密, 变成密文
通过私钥对密文解密, 变成明文

也可以反着用
通过私钥对明文加密, 变成密文
通过公钥对密文解密, 变成明文

服务器生成公钥和私钥,并将公钥发送给客户端
在这里插入图片描述
客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密

服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响
应数据.
后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道, 其
他主机/设备不知道密钥即使截获数据也没有意义
由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密,
后续的传输仍然使用对称加密.
此处的非对称加密,只会对密钥进行加密,不会对http的header和body进行加密,因为其效率很低,而对称加密的效率要高不少.

中间人攻击

在这里插入图片描述
解决中间人攻击的关键,需要让客户能够确认当前是收到的公钥确实是服务器返回来的,而不是黑客伪造的

引入证书

这个证书包含了刚才的公钥(会分发给其他的各种设备)不是通过网络传输的,而是通过直接的系统内置的,客户端安装了Windows系统,系统里就会内置各种知名公证机构的公钥(黑客没法对这个环节进行中间人攻击), 也包含了私钥和网站的身份信息
通过第三方的认证机构作保,来确认当前的公钥是有效的
这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:
证书发布机构
证书有效期
公钥
证书所有者
数字签名:
针对上述数据进行的一个验证的机制,公证机构,在生成证书的时候,会先对证书中的其他属性,生成校验和,公证机构还会使用自己的私钥(不少服务器的私钥),针对上述的校验和进行加密,这样别人就无法重新生成校验和
在这里插入图片描述
客户端在拿到证书之后,就会对证书进行验证(检查一些证书是否合法,是否被篡改过)
客户端手里持有认证机构的公钥,就可以针对数字签名进行解密,得到了校验和明文,接下来客户端就可以按照同样的算法,把证书中的其他属性再算一次校验和,和证书中解密出来的校验和进行对比,如果一致,说明证书安全,如果不一致,说明证书被篡改了

相关文章:

  • 【跳槽须知】关于企业所签订的竞业协议你知道多少?
  • 2024年华为OD机试真题-螺旋数字矩阵-Java-OD统一考试(C卷)
  • Linux中ps/kill/execl的使用
  • FPS游戏框架漫谈第二十天
  • Redis面试题41
  • 2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)
  • Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
  • 关闭Ubuntu 默认开启的自动安全更新
  • easyexcel解析跨多行的数据
  • 【STL】list模拟实现
  • pnpm + vite 从外网迁移到内网环境开发
  • Netty连接通道中的Channel参数模型
  • 【数据结构与算法】(5)基础数据结构之队列 链表实现、环形数组实现详细代码示例讲解
  • 2.5作业
  • 【Kotlin】Kotlin基本数据类型
  • axios 和 cookie 的那些事
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • QQ浏览器x5内核的兼容性问题
  • SegmentFault 2015 Top Rank
  • Spring-boot 启动时碰到的错误
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 码农张的Bug人生 - 见面之礼
  • 王永庆:技术创新改变教育未来
  • 学习笔记:对象,原型和继承(1)
  • 用jQuery怎么做到前后端分离
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 阿里云重庆大学大数据训练营落地分享
  • #162 (Div. 2)
  • #图像处理
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • %@ page import=%的用法
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (一)VirtualBox安装增强功能
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .Net 垃圾回收机制原理(二)
  • @DataRedisTest测试redis从未如此丝滑
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [C# WPF] 如何给控件添加边框(Border)?
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [Flutter]打包IPA
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
  • [JDK工具-2] javap 类文件解析工具-帮助理解class文件,了解Java编译器机制
  • [LeetCode]-Integer to Roman 阿拉伯数字转罗马数字