用故事说透HTTPS
本文来自素燕公众号,原文地址:用故事说透https
故事中的主演:
小华今年上大一,这是她第一次离开父母,独自一人到北京上学。今天妈妈的生日,想了想要给妈妈一个祝福,便给妈妈发了条消息:
妈妈收到这条消息非常开心,女儿这么忙还能记得自己的生日,两个人便开始聊了起来。妈妈知道女儿一直省吃俭用,决定给女儿打点钱过去。
小黑是个黑客,专搞一些“偷鸡摸狗”的事情,他已经监听了这对母女的对话。一直看着她们唠家常,都快睡着了。
直到看到母女提到钱的事情,立马打起精神,决定搞一笔。然后他截获了小华的消息,替换成自己精心准备的内容给小华的妈妈发过去了。
小华的妈妈随后就把钱打给了小华,未曾想到母女二人的聊天内容尽在小黑的掌控之中。小黑拿到钱后就逃之夭夭了。
HTTP 协议是建立在 TCP 之上的,TCP 是否安全决定了 HTTP 是否安全。HTTP的报文内容并未加密,容易被监听和篡改。小黑就监听了母女二人的聊天内容,并对内容进行了篡改,伪装成女儿进行聊天。所以 HTTP 有以下 3 个问题:
1.内容未加密,容易被监听,都是明文传输;
2.无法验证内容的完整性,容易被篡改,也就是说不知道消息是不是被修改过;
3.无法验证对方的身份,我现在聊天的人是谁,可靠吗?
小华被骗后,心里很难过,把这件事告诉了她的计算机老师王大强。王老师听到被骗的经历,感到非常惊讶,消息为什么会被篡改呢!立马查看了她们使用的聊天软件,原来这个软件直接使用的是 TCP 协议,没有做安全措施。
研究完软件后,大强对小华说:“这款软件有问题,以后别用了,要用具有安全措施的软件,比如使用 TLS/SSL 协议的软件”。
小华说:“什么是 TLS/SSL 呢?”。大强看到小华诚恳的表情,决定把 HTTPS 的原理告诉她,但是想到她可能理解不了,然后决定剖析一下她和妈妈被骗的场景。
既然小华和她妈妈的聊天内容是明文传输的,那直接把内容加密不就完事了吗。小华和她妈妈就约定了一个密码,所有的内容都通过这个密码进行加密和解密。
这种加密方式称为对称加密,加密解密都是通过同一个密码来操作,所以需要保证密码的安全,一旦泄露,后果很严重
小华立马觉察到事情的不妙,密码如何才能传给她妈妈呢。只能双方见面后来约定一个密码。但是她想到远在美国的爸爸,如果向他要钱的话,需要飞往美国把密码告诉他。这太麻烦了。
王大强老师说:“别急,还有更好的方法”。那就使用两个密钥,一个用来加密(称为公钥),另一个用来解密(称为私钥),使用公钥加密过的内容,只能通过私钥进行解密。私钥只有自己有,公钥可以丢给别人。
小华和妈妈,只把公钥交给对方就行。小华给妈妈发消息的时候,用妈妈的公钥进行加密,私钥只有妈妈有,也就是说只有妈妈能解密。
这种加密方式称为非对称加密,会有二个钥匙,一个钥匙加密过的内容只能通过另一个钥匙进行解密。至于为啥要说公钥加密私钥解密,虽然两个钥匙都可以进行加密解密,但是公钥加密私钥解密这种说法不是更好理解吗? 公钥被人都知道,私钥只有自己知道
小华想了想觉得还是有点不安全,假如她和妈妈进行交换公钥的时候,被小黑监听了。
小华把自己的公钥 xiaohua_pub 发给妈妈,中途被小黑掉包了,小黑把自己的公钥 xiaohei_pub 发给了小华的妈妈。这样小华妈妈发消息的时候就使用了小黑的公钥进行了加密,小黑获取到消息表可以用自己的私钥进行解密。
妈妈发送自己的公钥给小华的时候也被小黑掉包了,这时小黑就有了双方的公钥。
小黑监听到小华要求妈妈打钱的消息,对消息进行了篡改。
王大强老师听完小华的疑虑,竖起了大拇指,说道:“别急,听我慢慢解释”。
现在的问题是出在交换公钥的时候被小黑调包了,那接下来就需要解决这个问题。如何才能把公钥安全地送到对方手上。
这似乎是永远解不了的问题,毕竟公钥始终是要经过传输的。这似乎是一个鸡生蛋蛋生鸡的问题。后来小华想了想他平时网上购物的时候,以前总是担心怕付款了,商家跑路不给发货,自从有了淘宝这个第三方机构,毕竟阿里家大业大,值得信赖,即使商家跑路了可以找淘宝。
后来就出现了关于公钥的认证机构,这些认证机构很少,但非常权威,它会和电脑、浏览器等厂商达成信任关系,提前把认证机构的公钥安装到系统中,这样就不会涉及到传输的问题了。
在聊天的过程中,小华发现消息发送和接收的时候很慢,后来发现因为是加密算法耗费比较长的时间。小华想了想,使用对称加密的时候,唯一的缺点是交换秘钥比较麻烦,但是速度非常快。那么可以通过非对称加密来传输对称加密的密钥,密钥传输成功后,使用对称加密来加密消息。
HTTP 属于应用层协议,HTTPS 并不是一个新的协议,它只是比 HTTP 协议多了一层(TLS/SSL)来保证数据传输安全。TLS/SSL也属于协议,它的主要作用是保证数据传输安全。大多数使用的是 OpenSSL 来实现,比如 Node 中的 TLS 就是基于 OpenSSL 实现的
本文以故事的形式介绍了 HTTP 的不安全,保证 HTTPS 安全性的背后支持,包含数字证书、数字签名、对称加密、非对称加密的概念,当然光有理论还不行,需要实践才能更好地理解。大家加油。
用故事说透HTTPS的更多相关文章
- 用故事说透 HTTPS
本文来自素燕公众号,原文地址:用故事说透 HTTPS 故事中的主演:小华今年上大一,这是她第一次离开父母,独自一人到北京上学.今天妈妈的生日,想了想要给妈妈一个祝福,便给妈妈发了条消息:妈妈收到这条消 ...
- (转)一个故事讲完https
(转)一个故事讲完https 2 1 序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎 ...
- 一篇漫画故事带你理解透HTTPS(下)
上下集知识点总结: 前情提要: 蝙蝠纪元,疫情之下.二丫欲访问京东购物,不料弹出安全提示,遂找二毛一探究竟.二毛一顿排查后,开始用通俗易懂的语言深入浅出的向二丫解释 HTTP作用及优缺点.HTTPS的 ...
- 一篇漫画故事带你理解透HTTPS(上)
2020年蝙蝠纪元,二毛一如往常的呆在家中,不敢外出去浪. 为排解心中之闷,二毛抽了一口老烟,熟练的打开了全球最大的同性交友网站,准备假装了解下最近流行的项目... 只听啪的一声回车键,哪知浏览器蹦出 ...
- 通过一个小故事,理解 HTTPS 工作原理
本文摘录参考: 细说 CA 和证书(主要讲解 CA 的使用) 数字签名是什么?(简单理解原理) 深入浅出 HTTPS 工作原理(深入理解原理) HTTP 协议由于是明文传送,所以存在三大风险: 1.被 ...
- 一个故事看懂HTTPS
我是一个浏览器,每到夜深人静的时候,主人就打开我开始学习. 为了不让别人看到浏览记录,主人选择了"无痕模式". 但网络中总是有很多坏人,他们通过抓包截获我和服务器的通信,主人干了什 ...
- 一文说透https中的s是什么?
一.HTTP 与 HTTPS 有哪些区别? 1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险.HTTPS ,是在 TCP 和网络层之间加入了 SSL/TLS 安全协议,也就是安全套接字层 ...
- HTTPS从认识到线上实战全记录
前言 关于HTTPS,基本上你想知道的都在这里了.本文原标题<HTTPS原理与实践>,下图是本文配套PPT的目录截图: [TOC] 原理篇 认识HTTPS 先说一下,本文可能有些地方由于描 ...
- 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等
1.引言 HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其 ...
- 宇宙第一IDE是谁?
更多精彩文章,尽在码农翻身 微服务把我坑了 如何降低程序员的工资? 程序员,你得选准跑路的时间! 两年,我学会了所有的编程语言! 一直CRUD,一直996,我烦透了,我要转型 字节码万岁! 上帝托梦给 ...
随机推荐
- Attempting to use uninitialized value beta2_power -------TensorFlow报错
版本: Python=3.7 TensorFlow=1.14 具体代码: init=[tf.global_variables_initializer(), tf.local_variables_ini ...
- 分布式深度学习计算框架依赖环境——NCCL的安装
分布式深度学习计算框架(MindSpore, PyTorch)依赖环境--NCCL, NCCL提供多显卡之间直接进行数据交互的功能(可以跨主机进行). 注意: 本文环境为 Ubuntu18.04 以 ...
- 再谈《强化学习算法之DQN算法中的经验池的实现》 experience_replay_buffer模块的实现
去年曾写过一篇DQN经验池模块编写的博文: 强化学习算法之DQN算法中的经验池的实现,experience_replay_buffer部分的实现 最近又看到了一个经验池实现的代码,把这两个实现做了一下 ...
- spring5的新特性
1.背景 2.依赖环境的变化 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方 法在代码库中删除 3.自带了通用的日志封装 3.1.日志的简单使用 Spr ...
- IntelliJ IDEA 2024.2 发布:Spring Data JPA即时查询、自动补全cron表达式
今早看到,IntelliJ IDEA 2024.2 发布的邮件提示,看了一眼这个版本更新的新特性真的太适合我了!也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下.下面就来一起看看这个 ...
- k8s网络原理之Calico
什么是Calico: Calico是一个基于BGP的纯三层网络方案,其会为每个容器(pod)分配一个可路由的IP,在通信时不需要解包和拆包,因此网络性能损耗小,易于排查和水平扩展.Calico网络功能 ...
- 一个Java类在运行时候,变量是怎么在JVM中分布的呢?
JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的 又名:Java虚拟机的内存模型(JMM)是什么样的. 通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器.我们可以得到 ...
- 【转】AddMvcCore,AddControllers,AddControllersWithViews,AddRazorPages的区别
1.services.AddMvcCore()只註冊運行 Controller/Razor Pages 必要的核心服務,確保 Pipeline 程序可動作,其餘如像 Data Annotation M ...
- 7.22-27MY&MS&ORA等SQL数据库提权
7.22-27MY&MS&ORA等SQL数据库提权 思路:在利用系统溢出漏洞无果情况下,可以采用数据库提权: 前提:数据库服务开启,且获得数据库最高权限账号密码:除Access数据库外 ...
- Linq操作XML生成XML,实体生成XML和互转
开发接口中难免会遇到一些数据对接需要转换城xml,看到很多之前的代码都使用很传统的方法循环集合并定义xml后一一生成的,代码之封锁 特此使用了简单易用linq操作分享给大家,希望可以帮到需要的同学 今 ...