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

【HTTPS】对称加密和非对称加密

HTTPS 是什么

HTTPS 是在 HTTP 的基础上,引入了一个加密层(SSL)。HTTP 是明文传输的(不安全)

当下所见到的大部分网站都是 HTTPS 的,这都是拜“运营商劫持”所赐

运营商劫持

下载⼀个“天天动听“:

  • 未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接 image.png|454
  • 已被劫持的效果,点击下载按钮,就会弹出 QQ 浏览器的下载链接 image.png|465

image.png

即使运营商不劫持,如果被黑客盯上了,也是可能会对你的信息安全造成一些影响的

有些商场、饭店会提供 WiFi

  • 你连他们的 WiFi,你的请求就要经过他的路由器设备
  • 你能连,黑客就也能连,黑客就可能把路由器给黑了
  • 黑客可能用自己的设备伪造一个“商场 WiFi”
    一旦你的数据经过了黑客的设备,并且没有加密,那就非常危险了。尤其是“各种密码”

加密

解决安全问题,最核心的要点,就是“加密”。黑客领域的攻防,都是“相对”的概念,这是一个对抗的过程。但是可以做到,即使数据被黑客拿到了,他也解析不了/无法篡改,也能起到安全的效果

  • 你加密的数据,理论上来说,也可能被黑客破解,但加密的成本很低,但破解的成本很高
  • 只要破解成本超出了要保护的数据价值本身,就是安全的

引入加密,是保证数据安全的有效手段

密码学中的几个重要概念:

明文:要传输的真实数据,要表达的实际的意思
密文:针对明文加密后,得到的结果。往往是不直观的,不易理解的
密钥:加密和解密过程中的关键道具

对称加密:加密和解密用的是同一个密钥
非对称加密:加密和解密用的不是同一个密钥,这两个密钥 k1k2是成对的

  • 可以使用 k1 加密,k2 解密
  • 可以使用 k2 加密,k1 解密

两个密钥,可以一个公开出去,称为“公钥”,另一个自己保存,称为“私钥”
手里只有一把的话,是无法知道另一把是什么的(是有一定的数学原理的)

HTTPS 工作过程(面试)

只要针对 HTTPS 的数据进行解密了,就能够得到 HTTP 格式的数据

上述的运营商劫持,无论是修改 referer 还是修改返回的链接(body),本质上都是明文传输惹的祸。需要引入加密,对上述传输的数据进行保护,主要就是要针对 headerbody 进行加密

1. 引入对称加密

通过对称加密的方式,针对传输的数据进行加密操作,这样网络上传输的就是密文了 image.png|673

  1. 对称加密的时候,客户端和服务器需要使用同一个密钥

  2. 不同的客户端需要使用不同的密钥

    • 如果所有的客户端的密钥都一样,加密就形同虚设,黑客就很容易拿到密钥
    • 这就意味着,每个客户端连接到服务器的时候,都需要自己生成一个随机的密钥,并且把这个密钥告知服务器。(也不一定非得是客户端生成,服务器生成也行,但也是要告诉客户端的)

问题的关键: 密钥需要传输给对方,一旦黑客拿到了密钥,意味着加密操作就没意义了image.png|513

  • 这样即使你传输的是密文,但黑客也能解密

2. 引入非对称加密

使用非对称加密主要的目的是为了加密“对称密钥”,确保对称密钥的安全性

不能使用非对称加密针对后续传输的各种 headerbody 等进行加密,而是只能对对称加密的密钥进行加密

  • 因为非对称加密的加密解密成本(消耗的 CPU 资源)远远高于对称加密
  • 少来少去的用点还可以,但是如果大规模的使用,就难以承担了

image.png

  • 此处就让服务器持有私钥(只有服务器知道);客户端持有公钥(黑客也知道)
  • 客户端就可以使用公钥,对生成的对称密钥进行加密
  • 黑客虽然有公钥,但是对密钥加密的密文只有通过私钥才能解密,黑客拿不到私钥,也就无法对这个数据解密,也就拿不到 888888 对称密钥了
  • 只要 888888 安全到达服务器,后续服务器和客户端之间就可以使用 888888 作为对称加密的密钥,此时黑客就无法破解后续的数据了

客户端向服务器要公钥和通过公钥传输对称加密的密钥的两步操作就是 SSL 内部完成的操作。使用 HTTPS 的时候,磁层也是 TCP,先进行 TCP 三次握手,TCP 连接打通之后,就要进行 SSL 的握手了(交换密钥的过程)。后面才是真正的传输业务数据。(完整的 HTTPS 的请求/响应)

此处公钥和私钥可以这样理解

  • 有些老的楼里带有信箱
  • 你的手里有信箱钥匙(私钥),邮递员手里有锁头(公钥

可以让服务器生成公钥私钥。私钥就只有服务器自己知道,公钥可以告诉任何人

  • 客户端要传输数据的时候,就向服务器要公钥

上述操作,其实仍然存在严重的漏洞,黑客仍然有办法破解掉其中的加密操作

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RocketMQ控制台手动新增主题,报错:clusterName or brokerName can not be all blank
  • 【设计模式-备忘录】
  • Redisson 总结
  • 目前主流语言比较
  • Alluxio EnterpriseAI on K8s 部署教程
  • 探索 Python 的火焰:Fire 库的神秘力量
  • 2016年国赛高教杯数学建模A题系泊系统的设计解题全过程文档及程序
  • 前端开发——(1)使用vercel进行网页开发
  • 标准库标头 <bit>(C++20)学习
  • 【在Linux世界中追寻伟大的One Piece】NAT|代理服务|内网穿透你会吗?
  • 从零开始学习Linux(14)---线程池
  • python有main函数吗
  • 后端-navicat查找语句(单表与多表)
  • NLP 文本匹配任务核心梳理
  • 基于51单片机的汽车倒车防撞报警器系统
  • [译]CSS 居中(Center)方法大合集
  • Java反射-动态类加载和重新加载
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • scala基础语法(二)
  • 第十八天-企业应用架构模式-基本模式
  • 电商搜索引擎的架构设计和性能优化
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 跨域
  • 两列自适应布局方案整理
  • 前端存储 - localStorage
  • 前端性能优化--懒加载和预加载
  • 设计模式(12)迭代器模式(讲解+应用)
  • 算法系列——算法入门之递归分而治之思想的实现
  • 移动端唤起键盘时取消position:fixed定位
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • Prometheus VS InfluxDB
  • ​什么是bug?bug的源头在哪里?
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #QT(智能家居界面-界面切换)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (12)Hive调优——count distinct去重优化
  • (20050108)又读《平凡的世界》
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (八)Flask之app.route装饰器函数的参数
  • (过滤器)Filter和(监听器)listener
  • (七)c52学习之旅-中断
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ****三次握手和四次挥手
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET DataGridView数据绑定说明
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET中的Exception处理(C#)