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

HTTPS连接过程中的中间人攻击

HTTPS连接过程中的中间人攻击

  • HTTPS连接过程
  • 中间人劫持攻击

HTTPS连接过程

https协议就是http+ssl/tls协议,如下图所示为其连接过程:
在这里插入图片描述

HTTPS连接的整个工程如下:

  1. https请求:客户端向服务端发送https请求;
  2. 生成公钥和私钥:服务端收到请求之后,生成公钥和私钥。公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容;
  3. 返回公钥:服务端将公钥(证书)返回给客户端,公钥里面包含有很多信息,比如证书的颁发机构、过期时间等等;
  4. 客户端验证公钥:客户端收到公钥之后,首先会验证其是否有效,如颁发机构或者过期时间等,如果发现有问题就会抛出异常,提示证书存在问题。如果没有问题,那么就生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密;
  5. 发送客户端密钥:客户端用服务端的公钥加密密钥,然后发送给服务端。
  6. 服务端收取密钥,对称加密内容:服务端收到经过加密的密钥,然后用私钥将其解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行对称加密,这样除非知道密钥,否则无法知道传输的内容。
  7. 加密传输:服务端将经过加密的内容传输给客户端。
  8. 获取加密内容并解密:客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。

中间人劫持攻击

https也不是绝对安全的,中间人可以获取到客户端与服务器之间所有的通信内容,如下图所示为中间人劫持攻击:

在这里插入图片描述
中间人攻击流程如下:

  1. A向B请求公钥,但是却被C截获。
  2. C向B发送公钥请求。
  3. B将公钥发给C。
  4. C截获了B的公钥,然后替换成自己的公钥发给A。
  5. A将C的公钥当成了B的公钥,并用其加密信息,发给B。
  6. C截获了加密信息,用自己的私钥解密,获得明文。同时伪造新的信息,再用B的公钥加密,发给B。
  7. B获得加密信息,用自己的私钥解密。

只靠公钥本身是无法防御中间人攻击的。这时候,我们就需要一个第三方的可信任的机构来解决这个公钥传递的问题,那就是证书。

http://www.lryc.cn/news/96383.html

相关文章:

  • redis启动失败,oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  • milvus: 专为向量查询与检索设计的向量数据库
  • 【C# 数据结构】Heap 堆
  • 智慧园区楼宇合集:数字孪生管控系统
  • Ajax 黑马学习
  • 软件应用开发的常见环境
  • Rust中的iter(), into_iter(), iter_mut()
  • [SQL挖掘机] - 日期函数 - current_date
  • JAVA面试总结-Redis篇章(三)——缓存雪崩
  • maven编译报错
  • HPC集群调度系统和计算系统
  • pg_archivecleanup清理wal日志
  • 继承中的访问级别
  • (学习日记)2023.06.09
  • 激光雷达-相机联合标定
  • [golang gin框架] 40.Gin商城项目-微服务实战之Captcha验证码微服务
  • 【LeetCode热题100】打卡第44天:倒数第30~25题
  • C# 匿名方法和Lambda表达式
  • uniapp微信小程序scroll-view滚动scrollLeft不准确
  • symfony/console
  • OSI模型简介及socket,tcp,http三者之间的区别和原理
  • 【leetcode】leetcode69 x的平方根
  • springboot与rabbitmq的整合【演示5种基本交换机】
  • 【设计模式】设计原则-单一职责原则
  • 【C++】-多态的底层原理
  • 【部署】让你的电脑多出一个磁盘来用!使用SSHFS将远程服务器目录挂载到Windows本地,挂载并共享服务器资源
  • /var/lock/subsys目录的作用
  • DETR (DEtection TRansformer)基于自建数据集开发构建目标检测模型超详细教程
  • C++初阶 - 5.C/C++内存管理
  • 数学建模学习(3):综合评价类问题整体解析及分析步骤