HTTPS 的故事
Posted 前端外刊评论
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS 的故事相关的知识,希望对你有一定的参考价值。
本文其实总体算是一篇译文,原作在此 HTTPS explained with carrier pigeons, 看完不禁感叹作者的思路清奇,于是跟风把原文重新“诠释”一下 ...
你在 Internet 上的所有活动,其实都可以归类为 往服务器发送数据 以及 从服务器接受数据,也就是你与服务器的通信。原文作者对这个行为给了一个神奇的比喻:有一只信鸽在你与服务器之前传送消息。
同理,我们也把网络活动中的其他基本元素拟人化,这样这个故事才会完美 ...
LiLei 跟 HanMeimei 通信,情敌 Jim Green 是个 hacker, 当然,信使自然就是 Polly 了。
接下来,请开始你的表演 ...
情窦初开
李雷想告诉韩梅梅:“I LOVE U”,于是李雷写好情书,绑在 Polly 的腿上,让 Polly 去韩梅梅家,韩梅梅拿到情书,呵呵一笑,哦不,娇羞一笑,OK,一次信息传递成功。
有人使坏
然而,喜欢韩梅梅的不止李雷,还有 Jim Green,他半路截取了 Polly,看到“ I LOVE U”,顿生醋意,愤而把消息改成 "F**K OFF" ... 当韩梅梅收到信时,爱情的萌芽必然就被扼杀了,因为韩梅梅并不知道李雷发来的消息被半路拦截并篡改了。
加密消息
上次的事情后,李雷花了用了 1024 天向韩梅梅解释,最终让韩梅梅相信是有人在背后捣鬼,于是,他俩这次学乖了,决定把消息加密,俩人约定好,发送时把消息中的字母都向字母表后移 1 位,也就是发送 “J MPWF V”,这时就算 Jim Green 把 Polly 截了也不知道他们的消息是什么意思,只有韩梅梅知道消息解码的规则,她将每个字母对应字母表前移一位就知道原始消息是“ I LOVE U”,掩面娇羞...
插播科普 上面这种加密消息的方式就是对称加密,你知道如何加密,也知道如何解码。然后李雷跟韩梅梅用的字母表偏移的加密方法叫 Caesar cipher, 凯撒加密。现实世界中用的加密算法会更复杂,但是基本原理相同。
假如他们之前没见过
对称加密在只有发送和接收方知道加密算法和密钥的时候,是安全的。但是问题是,如果李雷和韩梅梅在通信之前都没见过,那他们就没法约定加密算法和密钥了。
旁白:那可以先通信一次把通信方式和密码发过去,然后再发消息呗?
然而,Jim Green 又不是傻,看见 Polly 第一次飞过去,拦下来,哦,原来你们要用凯撒加密,密钥是 1 ... 上面说了,加密方式只有发送方和接受者知道时是安全的,现在第三个人知道了,不安全了。
他们的通信需要更安全的加密系统 ...
PS:在现实中,如果使用对称加密,客户端和服务端都需要保存大量的加密算法和对应的密钥,管理成本巨大且容易泄漏。
让 Polly 抱个密码箱
李雷和韩梅梅想出来了一个复杂的通信流程:
李雷先让 Polly 不带情书飞到韩梅梅家;
韩梅梅在 Polly 身上绑一个开着的密码箱,密码只有韩梅梅知道,然后让 Polly 飞回去;
李雷在 Polly 回来的时候,把情书放进去,把密码箱锁起来,让 Polly 再飞到韩梅梅家;
韩梅梅拿到密码箱,打开,拿到情书,掩面娇羞;
Polly 内心旁白,MMP,你们谈个恋爱累死老子了 ...
就通过这样的流程,他们安全的谈情说爱,Jim Green 无计可施 ...
插播科普 上面这种加密方式是非对称加密,非对称的含义相对于对称来说,就是你即使知道怎么加密的的方式,也不知道怎么解密,对应上面的流程就是李雷锁的密码箱却没办法打开。
术语来讲的话,就是我们熟知的公钥和私钥,服务端将公钥(密码箱)发送给客户端,客户端使用公钥加密信息(锁箱子),服务端接受消息后使用私钥(仅韩梅梅知道的密码)解密。
密码箱安全吗
然而问题还没有结束 ...
李雷拿到开着的密码箱,如何确定这个密码箱就是韩梅梅让 Polly 带过来的?Jim Green 能截消息,也能截密码箱然后换成自己知道知道密码的密码箱呀,这样的话,通信同样不安全(即公钥来源的安全性)。
李雷必须要知道箱子是不是韩梅梅的,于是韩梅梅想到一个办法,她在密码箱上签上自己的名字,当李雷拿到盒子的时候,就可以看签名是不是韩梅梅的从而决定是否安全。
然而,还又同样的问题,Jim Green 同样也能伪造签名呀 ...
恶魔李雷:妈蛋的,这恋爱老子不谈了!
天使李雷:山无棱天地合乃敢与君绝
天使战胜了恶魔,故事继续 ...
公信
我们需要一个有公信力的人 -- 郑叔 -- 来代替签名,他是大家公认的好人,只会给认证过的合法的人签名,签名的密码箱的来源都确实就是需要签名的本人。
这样,Jim Green 就不能换箱子和伪造签名了,一旦没有郑叔的认证,李雷就可以断定这不是韩梅梅的箱子,不安全。
同样,术语上,郑叔就是 Certification Authority,认证机构,有权利颁发证书(签名)。
在这个关系链中,信任 CA 是基础,因为,其实也会有 CA 告诉你他自己是安全的,他会给自己颁发证书。对应例子中,就是如果 Jim Green 也是个有公信力的人然后给自己签名那就没得玩了,但是我们“相信” CA 都不会做这样的坏事,所以 Jim Green 不会是 CA.
Polly 好累
对比最初的消息,我们为了安全,本来只用送一封信,却加了一个密码箱和一个签名,运输成本重多了,Polly 累了,不开心了 ...
于是,他们决定,消息体还是以凯撒加密的方式传输,然后偏移步长用郑叔签名的保险箱发送,这样就可以平衡消息的安全性和传输的成本问题。
术语解释就是非对称加密会影响传输速度,因为消息体变大了,所以通常综合性能和安全性考虑,会用对称加密消息体,非对称加密用来编码对称加密的密钥。
结语
故事中通信的过程其实就是原始的 HTTP 到 HTTPS 的演进过程,当然隐藏了真实通信的很多细节,比如三次握手 ... 但是大体上描述了原理和部分细节。
去探索更多关于 HTTPS 的原理 & 申请证书改造你的网站吧 ...
以上是关于HTTPS 的故事的主要内容,如果未能解决你的问题,请参考以下文章