一篇漫画故事带你理解透HTTPS(下)
上下集知识点总结:
前情提要:
蝙蝠纪元,疫情之下。二丫欲访问京东购物,不料弹出安全提示,遂找二毛一探究竟。二毛一顿排查后,开始用通俗易懂的语言深入浅出的向二丫解释 HTTP作用及优缺点、HTTPS的功能作用......
未看过上集的,可进入传送门:
【故事】跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租(上)
二丫挂掉电话后,对二毛邪魅一笑...
开始之前,我们先了解一些前置技术。
前置技术
1 对称加密
定义:一种加密算法,只有一个密钥,这个密钥既可以用来加密数据,又可以用来解密数据。
优点:加解密速度快。
缺点:由于只有一个密钥,应用场景不广泛。
2 非对称加密
定义:也是一种加密算法,有两个密钥,一个称为公钥,另一个称为私钥。其中公钥可以广而告之,私钥需要自己妥善保存。公钥可以加密数据,然后用私钥解密;反过来,私钥也可以加密数据,用公钥来解密。
优点:由于公钥和私钥可以互相加解密,应用场景广泛。
缺点:加解密速度较慢。
3 消息摘要:
定义:通过哈希函数,将任意长度的消息变成固定长度的短消息,且一个固定的内容无论经过多少次哈希得到的结果仍然是固定不变的,称为消息摘要。
应用场景:可将长消息缩短,加密处理起来更快。
4 数字证书:
定义:由CA(一个权威的认证机构)颁发的一种证书,里面含有可以标识你身份的信息,类似于我们的身份证。
注:证书是必须由服务端主动向CA申请的。服务端(假设为网站)提供自己的域名等信息,接着CA会使用它们的私钥对内容进行加密,然后作为数字证书返回给服务端。
应用场景:
身份证明。由于CA是权威的,他们的私钥会严格保存,公钥会广为公开,所以一旦服务端网站出示了数字证书后,我们就可以依据颁发证书的CA,找到对应的公钥,然后解密数字证书得到里面的域名信息,并比对当前访问的域名是否跟得到的域名一致,以此判断真假。
5 数字签名:
定义:只有信息的发送者才能生成的、别人无法伪造的一段字符串。
主要有两个步骤生成:
首先对要发送的内容进行消息摘要得到短字符串。
发送者再使用自己的私钥对该短字符串进行加密,就得到了数字签名。(当然也可以对整个信息做数字签名,但是经过消息摘要处理的信息会更少,加密更快。)
应用场景:
完整性保护:只要我们使用发送者的公钥解密数字签名,得到原摘要内容,再跟我们自己进行消息摘要的内容进行对比,就能判断,若一致,则说明信息内容没篡改破坏过。
不可抵赖性:由于发送者的私钥只有发送者自己知道,所以只要信息比对一致,就能证明这信息是该发送方写的。
看到这里,读者可能有点懵,那数字签名跟数字证书有什么不同?
数字签名一般是用户用自己的私钥加密摘要生成的,目的是为了数据完整性保护和不可抵赖性。
数字证书是使用CA的私钥加密你的信息形成的,目的是证明你的身份。
HTTPS的技术实现
在上集的例子中,小明给小红传纸条,但是小明的明文通信可能会被第四排同学窃听、篡改、破坏、伪装,而对应的解决方法就是使得通信规则能有这三个功能:加密数据、数据完整性保护、身份验证。
那该如何使得通信规则有这三个功能?小明在研究了前置技术的内容后,受到启发,决定这样干:
(这里假设学校有个大队长(即CA)能够为学生信息做公证,即颁发数字证书,小明小红都已经申请了自己的数字证书。数字证书中包含自己的姓名、自己的公钥等信息)
1 在开始传对话内容前,小明就先传纸条请求小红的数字证书,请求时也把自己的数字证书传过去。
2 小红收到信息后,就用大队长的公钥解密得到信息,得知是小明请求与她传纸条,于是她含羞的把自己的数字证书回传了过去。
3 小明得到返回的数字证书后,也用大队长的公钥解密得到信息(信息含有小红姓名和小红公钥),比对姓名信息看是否为小红。如果不是小红,则不通信,如果是,进入下一步。
4 小明随机生成一串字符a,然后拿出小红的公钥,并用该公钥加密这串字符a,返回给小红。
5 小红收到信息就用自己的私钥进行解密,然后取出字符a,随后小红将内容 “同意传纸条” 用字符a作为密钥进行对称加密,得到密文后写入纸条中。另外,小红也对内容 “同意传纸条”进行消息摘要,随后用自己的私钥对摘要的内容进行加密得到数字签名,写入纸条署名处。
6 小明收到信息,用字符a作为密钥进行对称解密,得到内容“同意传纸条”。为了鉴别内容是否被破坏或篡改过,小明使用小红的公钥对署名的字符进行解密,得到消息摘要内容a,另外再将内容“同意传纸条”进行消息摘要得到消息摘要b,最后将摘要内容a和摘要内容b进行比对,如果一致,则说明没有破坏或篡改过。
7 通信继续。。
至此上面几个步骤,就完成了安全的连接和通信:双方都使用字符a作为密钥对内容进行对称加密,另外生成数字签名写在一旁用于校验内容。
身份验证的实现:
此前小明不是怕第四排同学伪装成小红回纸条信息吗?
现在有了数字证书的功能,在一开始准备传对话内容前就可以通过CA公钥解密数字证书,得出信息来辨别对方身份。
万恶的第四排同学(中间人)再也无法伪装女神小红了!
注:HTTPS机制非常重要的一点就是假定CA的私钥是安全的,如果泄露了,HTTPS的安全性机制将土崩瓦解。所以CA一般是大公司或组织,因为它们更有能力保护自己的私钥,因此浏览器信任的CA列表往往是一些知名CA。
数据加密的实现:
此前小明不是怕第四排同学窃听纸条信息吗?
现在因为有了前面的身份验证,也就确保得到了真实对方的公钥,并能利用该公钥加密传输即将用于对称加密对话内容的密钥(例子中的字符a)。只要这个对称密钥被安全传输了,后面进行纸条内容的加密也就被高效的实现了。
万恶的第四排同学(中间人)再也不无法偷看我的纸条小秘密了!
注:这里可能会有同学问,既然双方都知道彼此的公钥后,那为何不直接拿对方的公钥来加密自己要发出的信息?这个确实可以,但是却忽略了高效性,前面已经提到过,非对称加密算法比对称加密算法效率要低,考虑到后续通信的频繁性,所以最好使用对称加密来对通信内容进行加密。
数据完整性保护的实现:
此前小明不是怕第四排同学篡改或破坏纸条信息吗?
现在有了数字签名,可与原有信息进行对比,就可以判断纸条内容有无被更改或破坏了。
万恶的第四排同学(中间人)再也无法更改或破坏我对女神表达的情感了!
HTTPS的建立过程:
弄懂了上面小明传纸条的例子,再来理解访问使用 HTTPS 协议网站的建立过程,简直就是易如反掌!
建立安全的HTTPS通讯,可防止中间人攻击,这需要以下步骤:
1、服务端配置正确了对应的安全证书
2、客户端发送请求到服务端
3、服务端返回公钥和证书到客户端
4、客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
5、服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做密钥对需要发送的数据进行对称加密
6、客户端在接收到加密后的数据使用密钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
7、SSL加密建立。后续数据传输还将用到数字签名技术。。
注:小明传纸条的例子和用户访问网站有点不同:小明小红互相传纸条需要双方互相进行身份验证;而用户访问网站,只是用户验证网站,网站不验证用户。但无论哪种情况,使用的底层技术都是上面几种,只是应用情况不同。
事件后续吃瓜
点击域名左边的感叹号标志,就能查看到该网站提供的证书信息。
可以看到这个数字证书的签发人信息,从电子邮箱可以知道 QQ。后续网传这QQ主人还是个初学计算机的高中生......
不过,“初学者”的猜测显然不符合常理,“凭一己之力搞坏网络”所需要的智商,和“拿自己QQ邮箱签名证书”所对应的智商,显然不在同一个位面上。这不符合常理,事出反常必有妖。
最近,这位号主也发话澄清了。。
晚上,二毛坐在电脑桌前,看着万家灯火,想象着二丫又搞懂了一些计算机知识点后,欣喜若狂、欢呼雀跃的样子,不禁感到欣慰。
他随后在电脑上敲下一行标题:跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租。
哎,程序员的快乐,往往就是那么朴实无华、枯燥且乏味。
往期精彩:
【故事】跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租(上)
欢迎来到程序员二毛的世界,在这里你将看到特点鲜明的人物、跌宕起伏且有趣的故事情节、通俗易懂的技术。
关注公众号《程序员二毛》,后台回复 1024 领取变强秘籍。
一篇漫画故事带你理解透HTTPS(下)的更多相关文章
- 一篇漫画故事带你理解透HTTPS(上)
2020年蝙蝠纪元,二毛一如往常的呆在家中,不敢外出去浪. 为排解心中之闷,二毛抽了一口老烟,熟练的打开了全球最大的同性交友网站,准备假装了解下最近流行的项目... 只听啪的一声回车键,哪知浏览器蹦出 ...
- 一个故事带你理解if __name__ == '__main__'
如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ...
- 爸爸和儿子的故事带你理解java线程
今天回想线程方面的知识,发现一个非常有意思的小程序.是用来说明多线程的以下贴出来分享下,对刚開始学习的人理解线程有非常大的帮助 爸爸和儿子的故事 <span style="font-f ...
- [转帖]从零开始入门 K8s | 手把手带你理解 etcd
从零开始入门 K8s | 手把手带你理解 etcd https://zhuanlan.zhihu.com/p/96721097 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 KV 存储系 ...
- JDK1.8源码逐字逐句带你理解LinkedHashMap底层
注意 我希望看这篇的文章的小伙伴如果没有了解过HashMap那么可以先看看我这篇文章:http://blog.csdn.net/u012403290/article/details/65442646, ...
- 用故事说透 HTTPS
本文来自素燕公众号,原文地址:用故事说透 HTTPS 故事中的主演:小华今年上大一,这是她第一次离开父母,独自一人到北京上学.今天妈妈的生日,想了想要给妈妈一个祝福,便给妈妈发了条消息:妈妈收到这条消 ...
- 手摸手带你理解Vue的Computed原理
前言 computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利.那么本文就来带大家全面理解 computed 的内部原理以及工作流程. 在这之前,希望你能 ...
- 鸿蒙内核源码分析(调度故事篇) | 用故事说内核调度 | 百篇博客分析OpenHarmony源码 | v9.07
百篇博客系列篇.本篇为: v09.xx 鸿蒙内核源码分析(调度故事篇) | 用故事说内核调度过程 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...
- 鸿蒙源码分析系列(总目录) | 百万汉字注解 百篇博客分析 | 深入挖透OpenHarmony源码 | v8.23
百篇博客系列篇.本篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析 | 51.c.h .o 百篇博客.往期回顾 在给OpenHarmony内核源码加注过程中,整理出以下 ...
随机推荐
- HTML中的meta标签常用属性及其作用总结
文章同步到github 以前没怎么太注意过meta标签的作用,只是简单了解一些常用属性,现在结合个人了解的进行记录与总结: 元数据 首先需要了解一下元数据(metadata)元素的概念,用来构建HTM ...
- 手摸手教你在vue-cli里面使用vuex,以及vuex简介
写在前面: 这篇文章是在vue-cli里面使用vuex的一个极简demo,附带一些vuex的简单介绍.有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以帮到大家. 本文首发于我的个人 ...
- Jessica's Reading Problem POJ - 3320
Jessica's Reading Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17562 Accep ...
- xadmin安装和配置
1.在虚拟环境pip install xadmin 2.安装完成之后在settings.py的install app里面添加xadmin和crispy_forms 3.在主项目url里面把原来的adm ...
- Ajax上传数据和上传文件(三种方式)
Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) <!DOCTYPE html> <html la ...
- xpath提取标签和内容
转:https://segmentfault.com/q/1010000012110138/a-1020000012113020 <div> <table> <tr> ...
- Django _web框架本质
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. socket服务端 import ...
- Vue2.0 【第一季】第2节 v-if v-else v-show 指令
目录 Vue2.0 [第一季]第2节 v-if v-else v-show 指令 第二节 v-if v-else v-show 指令 2.1 v-if指令.v-else指令: 2.2 v-show的使 ...
- 左侧带三角的Card css支持hover阴影
<div class="inputReportIndex"> <div class="inner"> <div class=&qu ...
- C#winform如何主窗口最大化最小化默认大小
this.WindowState = FormWindowState.Minimized; bool b = true; private void button2_Click(object sende ...