用故事说透 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 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,我烦透了,我要转型 字节码万岁! 上帝托梦给 ...
随机推荐
- CentOS7中安装MariaDB
什么是mariaDB? 在线安装(慢的要命) RPM离线安装(CentOS7.X) 在线安装 打开官方网站 https://mariadb.org/ 点击Download,跳转到下一页面 继续点击Do ...
- 2019-9-17:渗透测试,基础学习,apache初识,mysql初识等笔记
python -m SimpleHTTPServer gedit 文本编辑器 apache2 默认配置文件目录:/etc/apache2/apache2默认首页源码: /var/www/html my ...
- Fortran数组、函数--xdd
1.数组的声明 integer,parameter::num= integer::student(num) 或者 integer a() 或者 integer a(,) student()= !第一个 ...
- Spring Cloud - 切换Ribbon的负载均衡模式
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模 ...
- SpringMVC配置了拦截器(interceptors)却显示不出css、js样式的解决办法
首先因为在web.xml里面配置了 <filter-mapping> <filter-name>characterEncodingFilter</filter-name& ...
- Java工作流引擎全局变量的介绍
关键词:工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流主流框架 自定义工作流引擎 在系统中有很多的地方需要用到表达式的地方,这些 ...
- 使用aop加解密http接口
背景 最近在写一个小程序接口,由于安全性比较高,因此需要给请求参数和响应进行加密处理.如果在每个方法上都加密解密,那样代码就显得太繁琐了而且工作量会加大.所以,我们会统一进行加解密处理,一种比较传统的 ...
- python模块成像库pillow
python之成像库pillow python提供了python image library图像库,处理图像功能,该库提供了广泛的文件格式支持,如JPEG.PNG.GIF.等,它提供了图像档案.图像显 ...
- Layui下拉3级联动
这里我就不给大家详细说明了直接附图: js代码: layui.use(['layer', 'form','xform','layer'], function () { var element = la ...
- element table 先显示暂无数据 之后再加载数据 问题
项目中的表格请求数据时,进去页面,先出现 ''暂无数据'' 字样闪现一下之后在进行加载数据,用户体验十分不好 解决办法: <template> <el-table :data=&qu ...