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

《运营商劫持, 中间人攻击, 黑客入侵怎么办?》- HTTPS 技术反制

目录

1.HTTPS 是什么

1.1 运营商劫持

1.2 加密是什么

2. HTTPS 的工作过程

2.1 对称加密

2.2 非对称加密

2.3 引入证书


1.HTTPS 是什么

HTTPS 也是一个应用层协议 . 是在 HTTP 协议的基础上引入了一个加密层 .
HTTP 协议内容都是按照文本的方式明文传输的 . 这就导致在传输过程中出现一些被篡改的情况 .

1.1 运营商劫持

什么叫运营商劫持? 

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备 ( 路由器 , 交换机等 ), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改 .

假如我用我的浏览器去下载 qq 音乐, 我的数据就经过了运营商设备, 结果运营商设备把这个下载链接进行了替换, 于是我下载的就是一个 qq 浏览器了, 像这种行为就叫做运营商劫持.

运营商为什么要劫持呢 ?   (被金钱蒙蔽了双眼)

不光是运营商可以劫持到咱们的数据, 黑客也是有可能劫持到的!!!

比如, 黑客黑入了某个路由器, 这个时候就可能获取到所有经过路由器的网络数据报!!

1.运营商路由器可能会受到攻击. 2. 公共场合的 wifi 也是被攻击的对象. 如果此时我们在公共场合继续在网络上进行明文传输, 那么你的账号密码就要被窃取了....

如何保证数据不被窃取?  我们无法阻止黑客入侵路由器, 但是可以想办法对数据进行加密, 即使被窃取,,, 他也不知道是什么意思.

1.2 加密是什么

明文通过密钥变成密文这个过程就叫做 "加密".
密文通过密钥变成明文这个过程就叫做 "解密".

那密钥又是什么呢?
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为密钥.

就像电视剧中接头的人对暗号, 《鹿鼎记》中有一段暗语:

 [有没有清恶毒, 便盲眼复明的清毒复明膏药? ]  [有是有, 价钱太贵, 要三两黄金, 三两白银..]

像这种只有接收方, 发送方能动懂得形式, 就形如加密.

2. HTTPS 的工作过程

加密的方式有很多, 但是整体可以分成两大类: 对称加密 非对称加密.

如果加密和解密过程中, 使用的密钥是同一个, 就叫做 "对称加密".

如果加密和解密过程中, 使用的是不同的密钥, 就叫做 "非对称密钥".

2.1 对称加密

像上图中, 由于数据是加密的, 黑客并不知道明文是什么.

但是黑客不知道明文是什么的前提是, 他不知道密钥是什么, 如果黑客知道了密钥是什么, 就还是能够破解的.

客户端和服务器使用的密钥, 是一个啥样的密钥? 服务器不只是和一个客户端交互, 是同时和一堆客户端进行交互的, 针对这么多客户端, 使用的是相同的密钥, 还是不同的密钥呢?

如果是相同的密钥, 黑客只要伪装成一个客户端就可以拿到这个密钥了..于是每个客户端, 在和服务器连接的时候, 就自己生成一个密钥.(每个客户端的密钥各不相同)

那么如何把客户端生成的密钥, 传送给服务器呢? 

如果直接明文传输, 密钥就还是可能被黑客获取到! 

由于服务器同一时刻要给很多客户端提供服务, 并且每个客户端的密钥又是不同的, 因此服务器就需要维护与每个客户端的之间的密钥关系, 就显得相当麻烦....

所以, 理想的做法是, 在客户端与服务器建立连接的时候, 双方就协商好这次的密钥是什么, 后续再进行数据传输的时候, 就都用这个密钥.

虽然数据得到保护了, 但是密钥又该如何传输呢? 直接明文传输, 就还是可能被黑客截获到.. 如果使用另一个密钥对该密钥进行加密, 那 密钥2 该如何传输? 此时密钥的传输再使用对称加密就行不通了, 就需要引入非对称加密了..

2.2 非对称加密

此处用来加密的密钥, 是一对有关联的整数. 使用数学上的方法生成的,(拿两个很大的素数, 很容易得到乘积, 但是如果只知道乘积, 就没法还原回这两个素数)

非对称加密流程: 

把这一对密钥其中一个公布出来 (公钥), 另一个自己藏着 (私钥). 于是我们就可以使用公钥来加密, 私钥来解密. (也可以使用私钥加密, 公钥解密)

对于客户端:  当服务器生成一对 "公钥" 和 "私钥", 公钥公开出去, 自己保留私钥, 这时候, 客户端就可以拿到公钥, 并且针对对称密钥进行加密, 然后把加密后得密文通过网络来传输给服务器, 当对称密钥传过去后, 后续的数据传输就都使用对称密钥了.
而对于黑客:此时他只能拿到服务器的公钥, 不知道服务器的私钥!! 就无法截取有用数据..

既然非对称加密这么香, 为啥还要用对称加密呢?

因为非对称加密的加密和解密的开销是非常大的, 如果只是针对对称密钥使用, 就还好, 如果针对数据也使用非对称加密, 那么网络的传输速率就要大打折扣了. 此时非对称加密就不如对称密钥轻量. (安全和效率同时具备得同时具备)

但是这个办法并非无懈可击, 黑客还是有办法化解上述方案的.

中间人攻击 - (狸猫换太子)

服务器生成一对 "公钥" 和 "私钥" , 将 "公钥" 公开出去后, 黑客先拿到这个 "'公钥" , 然后自己也生成一对 "公钥" 和 "私钥" pub2, pri2, 然后把自己的 "公钥" pub2 返回给客户端, 由于客户端也不知道这个 "公钥" 是不是服务器的, 于是就拿这个 "公钥" 给对称密钥加密, 然后发送给服务器, 此时黑客就能获取到 使用 pub2 加密的对称密钥, 然后拿自己的 "私钥" pri2 进行解密, 就能获取到对称密钥 "123456" 了, 然后再使用之前的 "公钥" 将对称密钥 "123456" 进行加密, 发送给服务器, 那么后续服务器和客户端之间传输的任何数据, 黑客就都知道了.这一招就是典型的 "狸猫换太子".

那么如何解决中间人攻击的问题呢?

2.3 引入证书

在客户端和服务器刚建立连接的时候 , 服务器给客户端返回一个 证书 .
这个证书包含了刚才的公钥 , 也包含了网站的身份信息.

"证书" 机制, 就相当于引入了一个认证机构 , 就像公安局一样是可信的, 然后服务器需要向认证机构申请一个证书, 认证机构就会审核服务器的资质. (此处的证书就是一个加过密的字符串 和服务器的域名)

这就好比你想开一家公司, 你得去工商局办理营业执照, 工商局就会审核你的资料, 看你符不符合国家要求, 审核资质通过后才会给你颁发证书.

经过引入证书机制后, 黑客如果还想 "狸猫换太子", 就得去认证机构申请证书 (伪造证书), 但是伪造的证书很容易鉴别真伪, 客户端自己内置了一些证书 (提高访问速度), 就可以对比证书内容 (字符串) 和 对比服务器域名, 如果证书内容被篡改过或者域名对不上, 此时客户端访问服务器, 浏览器就会弹框提示:  你要访问的页面证书不匹配 / 域名不匹配, 或者你要访问的页面存在风险, 这时候, 客户端这边就会提高警惕了!!

====================================================================

说到这, 其实抓包工具 Fiddler 也是在进行中间人攻击. 我们首次勾选 Fiddler 的 https 的时候, 提示是否要安装一个 XXX证书, 这个证书就是 Fiddler 为了进行中间人攻击, 自己生成的证书. 所以我们得安装了这个证书, 浏览器才会信任 Fiddler , 浏览器才不会弹框. 

上述这些过程, 并不是 HTTPS 独有的. 这个过程是 SSL / TLS 的加密流程. HTTPS 就是 HTTP + SSL, 其他的协议也可能使用 SSL.


本篇文章就到这里了, 谢谢观看!!

相关文章:

  • Vue项目的记录(七)
  • 【云原生 • Kubernetes】集群资源监控概述、监控平台的搭建
  • SpringCloud Stream基本使用
  • 没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试,立省大二十个w
  • 【Linux】基本指令 (下篇)
  • 博途PLC的模糊PID(Matlab “fuzzy“工具箱使用介绍)
  • 【Vue 开发实战】实战篇 # 45:如何构建可交互的组件文档让代码高亮的显示在页面
  • m分别通过matlab和FPGA实现基于高阶循环谱的信号载波调制识别(四阶循环累量)仿真(包括仿真录像,matlab工程,fpga工程)
  • 前端知识体系
  • html5 图像标签
  • Python02--python中的缩进,注释和模块
  • STM32CUBEIDE(14)----外部中断EXTI
  • 项目管理PMP要点
  • Element-UI+vue实现登录表单
  • vmware安装centos7并制作多副本
  • JavaScript-如何实现克隆(clone)函数
  • 「面试题」如何实现一个圣杯布局?
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CSS 提示工具(Tooltip)
  • css布局,左右固定中间自适应实现
  • js面向对象
  • JS数组方法汇总
  • PHP 的 SAPI 是个什么东西
  • Python学习笔记 字符串拼接
  • select2 取值 遍历 设置默认值
  • TypeScript实现数据结构(一)栈,队列,链表
  • 给初学者:JavaScript 中数组操作注意点
  • 技术:超级实用的电脑小技巧
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端性能优化——回流与重绘
  • 如何用vue打造一个移动端音乐播放器
  • 三分钟教你同步 Visual Studio Code 设置
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​人工智能书单(数学基础篇)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $.ajax中的eval及dataType
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2)MFC+openGL单文档框架glFrame
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)linux使用docker容器运行mysql
  • (接口封装)
  • (算法)前K大的和
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)德国人的记事本
  • ./和../以及/和~之间的区别
  • .apk文件,IIS不支持下载解决
  • .gitignore
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net Core与存储过程(一)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net反混淆脱壳工具de4dot的使用