参考了这篇文章
https://www.oschina.net/translate/https-explained-with-carrier-pigeons
下面说一下我自己的理解。
先设定5个角色:爱丽丝,鲍勃, 马洛里, 信鸽, 泰德
- HTTP
爱丽丝给鲍勃发信,把信绑到信鸽的腿上,由信鸽传递。
这时候信鸽可能会被马洛里这个坏蛋截住,他能获取信中的内容并且对内容进行篡改,然后再发到鲍勃手中。
信的内容是明文传递的,这很不安全。
- 对称加密
上面传递的方式很不安全,于是爱丽丝和鲍勃就想把信的内容加密一下再传递,这样马洛里就算获取了信中的内容也不知道怎么解密。
爱丽丝想给鲍勃发信, 她想把传送的消息的每个字母都往后移两位,比如I Love You 就变成了K Nqxg Aqw。
但是鲍勃不知道怎么解密啊,于是爱丽丝需要先把加密的方式也就是密钥:每个字母后移两位告诉鲍勃,那鲍勃看到后就知道把收到的消息左移两位就可以了。 搞定!
但是大家看到问题了吗?问题就是如果最开始发送的密钥被马洛里截获呢?那之后爱丽丝跟鲍勃的信都能被马洛里破解。 这也不安全。
- 非对称加密
爱丽丝和鲍勃想出来了一个很有效的方式可以避免他们的信被马洛里看到,但是每次发信都要经过4个步骤:
a. 爱丽丝先把信鸽发给鲍勃(发一个空的消息)
b. 鲍勃把一个没有锁上的空盒子绑在鸽子腿上,发给爱丽丝
c. 爱丽丝把信的内容放到盒子里,锁上,让鸽子发给鲍勃
d. 鲍勃用手里面的钥匙打开盒子,然后拿到信
这样已经安全多了,这就是非对称加密算法。但是还有一个问题。
万一在b步骤马洛里把信鸽截获, 换了一个盒子怎么办,这样的话盒子发到爱丽丝手里,她不知道这个盒子是鲍勃的还是马洛里的,这该怎么办呢?
- 签名
鲍勃把盒子发给爱丽丝之前,在盒子上签上自己的名字, 这样爱丽丝看到这个签名就能知道是鲍勃发过来的了。
但是。。。如果是马洛里伪造鲍勃的签名怎么办呢?
- 认证机构
泰德终于要出场了,泰德是一个很有名的人,值得信任,他会给任何人签名,并且大家都只信任由他认证的合法的签名,这样用泰德认证过的签名来标记盒子是由鲍勃发出来的而不是马洛里。 马洛里也不可能获取到一个由泰德代表鲍勃签名盒子。泰德就是这样的认证机构, 爱丽丝可以信任鲍勃发给她的盒子因为泰德告诉她这个盒子是合法的。
- 高效的HTTPS
如果用非对称加密技术来发信比对称加密要慢,为什么呢,因为每次都要先发个鸽子,然后收到一个盒子,然后再发送信的内容,这样太慢了。
于是爱丽丝和鲍勃决定只在第一次访问的时候发送盒子,爱丽丝把对称加密的密钥放到盒子里面发给鲍勃,保证了只有他们两人知道密钥,在之后的飞鸽传书时只发送加了密的信,马洛里不知道密钥所以也无法破解信中的内容了。
这种方法兼具了非对称加密的安全和对称加密的高效,所以HTTPS是结合了二者的优点, 只有在交换密钥的时候才会用非对称加密技术。