前言网络上的任何活动都可以归结为服务器之前的消息收发。我们可以想象这些消息的发送和接收是由鸽子来实现的。这很荒谬,但这是真的。Http有一天,爱丽丝通过信鸽向鲍勃发送了一条“我爱你”的信息。但爱丽丝的情敌马洛里却在中途拦截了鸽子,将信息改为“我不爱你”。但是Bob无法知道消息已被篡改。Http就是这样工作的,很不靠谱。密码Alice和Bob,准备加密消息。例如将字母偏移3位,如“A”用“D”表示,“B”用“E”表示。即使马洛里截获了信鸽,也无法修改,因为他不知道加密方式,也看不懂信息的内容。但是Bob可以很容易地解密消息。这叫做对称密钥加密(symmetrickeyencryption),你知道怎么加密,怎么解密。在实际生产中,会用到更复杂的加密方式,但主要思想是一样的。如何确定密钥如果Alice和Bob在发送消息之前没有见面,他们就无法建立安全密钥。如果在消息本身中,则携带密钥。然后马洛里就会知道消息的内容,对其进行破译和篡改。这是典型的MITM(中间人攻击),为了避免中间人攻击我们不得不改变加密系统。AboxAlice和Bob设计了一个更好的加密系统,步骤如下:Bob发送一只鸽子给Alice,但没有任何消息。爱丽丝把一个带锁的盒子绑在鸽子的腿上,盒子是开着的,但是爱丽丝把钥匙留在了盒子里。鸽子飞回鲍勃所在的地方。Bob编写消息,将消息放入盒子中,然后将其锁定。然后鸽子将消息传回给爱丽丝。爱丽丝收到鸽子,用钥匙打开盒子,阅读信息。Alice和Bob之间的通信使用非对称密钥密码术(asymmetrickeyencryption)。你可以加密消息(把它放在一个盒子里),但你不能解密它(你没有密钥)。盒子也可以称为“公钥”,盒子的密钥称为“私钥”。盒子靠谱吗?还有一个问题。如果马洛里拦截了鸽子并将盒子换成自己的怎么办?爱丽丝可以在盒子上签名,鲍勃就知道这个盒子是不是爱丽丝的。那么Bob首先是如何识别签名的呢?Alice和Bob决定让Ted代替Alice在盒子上签名。泰德是一位非常有名且值得信赖的人。只有当Ted确定它是Alice的盒子时,他才会在盒子上签名。马洛里不会得到泰德的亲笔签名。而Ted就是证书颁发机构(CertificateAuthority)。有箱子的鸽子比没有箱子的鸽子重,飞得慢。我应该怎么办?使用非对称加密比使用对称加密慢。AliceBob决定仅使用盒子(非对称加密)交换加密密钥。然后使用密钥对消息进行对称加密。鲍勃送给爱丽丝一只空空如也的鸽子。爱丽丝用一个盒子归还了一只鸽子。Bob在本地生成一个密钥(用于对称加密),把密钥放在盒子里,发给AliceAlice用私钥解密盒子,得到Bob生成的密钥后发送消息。Bob只需要使用密钥进行对称加密(所以速度非常快)。这就是Https的原理。原来用信鸽解释的HTTPS指的是Man-in-the-middleattackHTTPS到底是怎么工作的呢?
