通俗易懂的HTTPS解释

我们在网络的行为(例如看文章、购物、上传图片),简单来说都是向服务器发送消息、接收服务器的消息,这个过程很像信鸽传书

为了更加形象,我们把通信过程中的主要角色服务器、客户端、黑客的称呼也替换一下,Alice、Bob、Mallory

如果 Alice 想给 Bob 发送信息,那么她就把信绑在信鸽腿上,放出信鸽,Bob 接到信鸽,拿到信纸读消息,这个过程就完成了,很不错,简单方便。

但是,坏人 Mallory 出现了,他把正在愉快飞翔的信鸽抓了下来,并把信给换了,这就麻烦了,Bob 得到了假消息。

这就是 HTTP 的沟通方式,方便但极不安全,不能传递重要信息。

Alice 和 Bob 很聪明,想到了一个好办法,他们设定了一套编码规则:把字母偏移3个位置,例如,D → A、E → B、F → C,这样,原本的消息“secret message” 就变成了 “pbzobq jbppxdb”。

Mallory 截获到消息后就会一脸懵逼,看不懂改不了,但是 Bob 知道解码规则,可以轻松转化成原文。

这个方式就是“对称式加密”。

对称式加密很安全,只要保护好key,别让其他人知道即可,但也有个问题,如果 Alice 和 Bob 在通信之前不认识,他们就没办法设定加密规则。

为了解决这个问题,通信方式又一次升级了,比如 Bob 向给 Alice 发送信息,他们的通信流程如下:

  • Bob 让信鸽飞到 Alice 那儿,但啥也没带,没有信息。
  • Alice 让信鸽带着一个箱子和一把开着的锁飞回到 Bob,Alice 自己留着锁的钥匙。
  • Bob 把信放到箱子里,并用锁把箱子锁上,让信鸽把箱子带给 Alice。
  • Alice 收到箱子,用钥匙开锁,拿到信

这样 Mallory 就没招儿了,Alice 和 Bob 可以愉快的通信了。

这个方式就是“非对称加密”,这个箱子就是公钥开锁的钥匙就是私钥

细想一下,有个问题,Bob 怎么确认箱子来自 Alice 而不是 Mallory 呢?为此,Alice 决定给箱子签个名,Bob 收到后先检查一下签名就可以确认了。

但这样还不够稳妥,Alice 决定让最权威的 Ted 来签名,Ted 是干啥的?他非常有名望,是个绝对值得信赖的家伙,他的签名大家都认,Ted 就是大名鼎鼎的 CA(Certification Authority)。

Alice 与 Ted 建立了合作,Ted 收到 Alice 的请求就会为她签名,而 Mallory 是得不到 Tex 给 Alice 的签名的,这样 Bob 就可以放心了。

这就是 HTTPS 的通信原理了,是不是很好理解。

我们可以看到 HTTPS 比 HTTP 的流程重了很多,有个箱子,还有签名,还增加了往返过程,性能肯定有所影响,这一切都是为了安全,所以我们要根据自己的需求场景来选择什么时候使用 HTTPS,什么时候使用 HTTP。

本文翻译整理自:

https://medium.freecodecamp.org/https-explained-with-carrier-pigeons-7029d2193351

本文分享自微信公众号 - 性能与架构(yogoup)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenssy

多线程:为什么在while循环中加入System.out.println,线程可以停止

这个我们都知道,由于 stopReqested 的更新值在主内存中,而线程栈中的值不是最新的,所以会一直循环,线程并不能停止。加上 Volatile 关键字后,...

21540
来自专栏GreenLeaves

TFS2018环境搭建一硬件要求

TFS可以安装在Windows Server和Windows PC操作系统中,但是TFS2018和2018只支持64位操作系统中,早期的版本没有操作系统的位数限...

41030
来自专栏机器之心

Diss所有深度生成模型,DeepMind说它们真的不知道到底不知道什么

深度学习在应用层面获得了巨大成功,这些实际应用一般都希望利用判别模型构建条件分布 p(y|x),其中 y 是标签、x 是特征。但这些判别模型无法处理从其他分布中...

11610
来自专栏大数据文摘

迷人又诡异的辛普森悖论:同一个数据集是如何证明两个完全相反的观点的?

在辛普森悖论中,餐馆可以同时比竞争对手更好或更差,锻炼可以降低和增加疾病的风险,同样的数据集能够用于证明两个完全相反的论点。

15830
来自专栏Python专栏

200行代码,一行行教你自制微信机器人

1) 用一个windows客户端工具运营公众号,真的很局限。虽然工具的功能很强大,能自动添加好友,自动拉好友入群,关键字回复等等,但是有一个绕不开的点,它是一款...

62320
来自专栏数据结构笔记

python基础类型(一):字符串和列表

注意到最后三个的单双引号是嵌套使用的,但是最后一个的使用方法是错误的,因为当我们混合使用两种引号时必须有一种用来划分字符串的边界,即在两边的引号不能出现在字符串...

13920
来自专栏编程坑太多

『高级篇』docker之Mesos集群架构图(23)

11940
来自专栏苦逼的码农

一些常用的算法技巧总结

数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些...

21930
来自专栏我是攻城师

理解BitMap算法的原理

位图:一种常用的数据结构,代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。在索引,数据压缩,海量数据处理等方面有...

25330
来自专栏smy

一张图解释负载均衡

首先当大量用户访问时候,先请求到nignx服务器,因为nignx对于高并发支持较好,所以由nignx服务器将访问需求分配给不同的apache服务器,apache...

21330

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励