怎么工作 HTTPS 为什么安全
地址栏前面那把小锁,表示这个连接用的是HTTPS。在网络领域里,我们顺着流程看了这个连接是按什么顺序建立的。这一次换个问题:那把锁为什么安全?答案出乎意料地眼熟。证书、密钥交换、对称加密、指纹和签名,这个领域里一样一样学过的零件,全都装在那把锁里。
不是怎么做,而是为什么安全
在网络领域遇到HTTPS时,我们看的是请求发出去、响应传回来的过程中,锁是按什么顺序挂上的。那是“怎么做”的视角。这里换成“为什么”的视角来看同一把锁:打开它,追问是什么挡住了什么,所以才值得信任。
一把锁要挡住的威胁有三种:假装成真网站的冒充,偷看来往内容的窃听,在半路改动内容的篡改。分别挡住这三种威胁的机制,一环扣一环地咬合在一起,就像一道门上同时装了猫眼、门锁和封条。
点一下两个视角比一比。网络领域看的是流程,也就是怎么做;这一课看的是安全的理由,也就是为什么。
流程告诉你动作的顺序,理由告诉你凭什么可以相信这些动作。两样都需要,不过这一课的主角是理由。
这个理由可以归成三个环。第一,确认对方真是那个网站。第二,安全地分好只有双方知道的钥匙。第三,用那把钥匙把内容锁上,并确认内容没被改过。三个环全部扣上,锁才真正起作用。
确认是不是真网站
第一个环是确认。挂锁之前,得先问一句:我现在真的在和那个网站说话吗?会不会是一个装成真网站的假货?
连接一开始,网站就把自己的证书发过来。浏览器像上一课看到的那样,核对链条能不能追到可信的根、签名对不对、证书上的域名和地址栏里的地址是否一致、有没有过期。全都对才进入下一步;只要有一样不对,就在这里停下,弹出警告。这一步就像进门前先看清来人的证件。
选一个网站,检查它的证书。担保对得上就通过,是假的就停下并弹出警告。
只有担保对得上的那一边亮绿灯通过,对不上的那一边亮红灯停下。外观仿得再像,也仿不了可信机构的签名,所以第一颗扣子只会扣在真网站身上。这就是挡住冒充的那一环。
不过,确认了对方是真的,对话并不会马上变安全。内容依然走在谁都能看到的路上。接下来该分只属于双方的钥匙了。
安全地分钥匙
第二个环是分钥匙。要想快速锁上内容,双方手里得各有一把相同的对称密钥。难的是,在可能有人偷看的路上,这把钥匙怎么分。
办法有两种。一种是浏览器做出对称密钥,用网站的公钥包好发过去,下面的演示就是这一种。另一种像密钥交换那一课讲的,双方交换公开的材料,一起做出同一个秘密。现在的连接大多用后一种,而且网站会用证书对应的私钥给自己那份材料签名,让半路的人没法调包。
依次点各个步骤,把钥匙分好。用公钥包好送出的钥匙,没有私钥就打不开,偷看的人只能空手而归。
顺着步骤走下来,双方拿到了同一把对称密钥。在半路盯着的人看到了那个包裹,可没有能打开它的私钥,只能空着手。秘密钥匙从没被单独寄出去,结果却只有双方握着它。
要是用一起做秘密的办法,还能再进一步:每次连接都做一个新秘密,用完就扔,所以就算日后网站的私钥泄露,过去的对话也解不开。现在该用这把钥匙锁上真正的对话了。
三个环扣上了
第三个环是上锁。用只有双方才有的对称密钥给来往的内容加密,在路上偷看的人只能看到一堆看不懂的字符。对称加密速度快,大文件和视频也能轻松锁上。
不光是上锁。每一段内容都附上一个用共享密钥算出的校验值一起发送,谁在半路哪怕只改一个字,校验值就对不上,收件方立刻就能发现。这种确认叫完整性。确认、分钥匙、加密加完整性,这三样一起扣上,锁才算锁住。
把三个环一个一个点上扣好。三个都扣上,冒充、窃听、篡改就全被挡住;只要有一个空着,锁就锁不上。
三个环全部扣上,锁就锁住了。冒充靠证书确认来挡,窃听靠加密来挡,篡改靠完整性校验来挡。每种威胁都有一个和它配对的环。
少了哪一个都不行。不确认就加密,等于和假网站非常安全地聊天;只确认不加密,内容就在路上一览无余。话说回来,锁也不是什么都能守住。偷看的人仍然能知道你连的是哪个网站、来往的数据大概有多少;诈骗网站也能为自己的域名正常拿到证书。锁的意思是对方是这个地址的主人,并不是说这个网站很诚实。
小结
归纳起来是这样:HTTPS是这个领域里学到的零件汇聚而成的锁。在网络领域我们看了流程,这里看了它为什么安全。安全来自三个环扣上:用证书确认是真网站,用公钥技术安全地分好双方专用的对称密钥,再用这把对称密钥加密内容,并用校验值确认完整性。
冒充、窃听、篡改,每个环挡住一种,三个一起扣上,锁才锁住。不过,锁守护的是来往的内容,管不到网站是否诚实。
依次点四个要点回顾一下:为什么安全、检查证书、安全地分钥匙、三个环扣上。
现在再看地址栏里那把小锁,感觉应该不一样了。它不只是一个图标,而是三个环全部扣上的承诺:用证书确认了对方,安全地分好了双方专用的钥匙,正在用这把钥匙锁着内容。
可是,锁守护的是已经打开的连接上的内容。那些压根不该放进来的连接,又由谁在门口挡住?下一课来看担当这份工作的防火墙。