HTTPS的故事:將網(wǎng)絡(luò)活動(dòng)中的其他基本元素?cái)M人化
本文其實(shí)總體算是一篇譯文,原作在此 HTTPS explained with carrier pigeons, 看完不禁感嘆作者的思路清奇,于是跟風(fēng)把原文重新“詮釋”一下 ...
你在 Internet 上的所有活動(dòng),其實(shí)都可以歸類為 往服務(wù)器發(fā)送數(shù)據(jù) 以及 從服務(wù)器接受數(shù)據(jù),也就是你與服務(wù)器的通信。原文作者對這個(gè)行為給了一個(gè)神奇的比喻:有一只信鴿在你與服務(wù)器之前傳送消息。
同理,我們也把網(wǎng)絡(luò)活動(dòng)中的其他基本元素?cái)M人化,這樣這個(gè)故事才會完美 ...
LiLei 跟 HanMeimei 通信,情敵 Jim Green 是個(gè) hacker, 當(dāng)然,信使自然就是 Polly 了。
接下來,請開始你的表演 ...
情竇初開
李雷想告訴韓梅梅:“I LOVE U”,于是李雷寫好情書,綁在 Polly 的腿上,讓 Polly 去韓梅梅家,韓梅梅拿到情書,呵呵一笑,哦不,嬌羞一笑,OK,一次信息傳遞成功。

有人使壞
然而,喜歡韓梅梅的不止李雷,還有 Jim Green,他半路截取了 Polly,看到“ I LOVE U”,頓生醋意,憤而把消息改成 "F**K OFF" ... 當(dāng)韓梅梅收到信時(shí),愛情的萌芽必然就被扼殺了,因?yàn)轫n梅梅并不知道李雷發(fā)來的消息被半路攔截并篡改了。

加密消息
上次的事情后,李雷花了用了 1024 天向韓梅梅解釋,最終讓韓梅梅相信是有人在背后搗鬼,于是,他倆這次學(xué)乖了,決定把消息加密,倆人約定好,發(fā)送時(shí)把消息中的字母都向字母表后移 1 位,也就是發(fā)送 “J MPWF V”,這時(shí)就算 Jim Green 把 Polly 截了也不知道他們的消息是什么意思,只有韓梅梅知道消息解碼的規(guī)則,她將每個(gè)字母對應(yīng)字母表前移一位就知道原始消息是“ I LOVE U”,掩面嬌羞...

插播科普 上面這種加密消息的方式就是對稱加密,你知道如何加密,也知道如何解碼。然后李雷跟韓梅梅用的字母表偏移的加密方法叫 Caesar cipher, 凱撒加密?,F(xiàn)實(shí)世界中用的加密算法會更復(fù)雜,但是基本原理相同。
假如他們之前沒見過
對稱加密在只有發(fā)送和接收方知道加密算法和密鑰的時(shí)候,是安全的。但是問題是,如果李雷和韓梅梅在通信之前都沒見過,那他們就沒法約定加密算法和密鑰了。
旁白:那可以先通信一次把通信方式和密碼發(fā)過去,然后再發(fā)消息唄?
然而,Jim Green 又不是傻,看見 Polly 第一次飛過去,攔下來,哦,原來你們要用凱撒加密,密鑰是 1 ... 上面說了,加密方式只有發(fā)送方和接受者知道時(shí)是安全的,現(xiàn)在第三個(gè)人知道了,不安全了。
他們的通信需要更安全的加密系統(tǒng) ...
PS:在現(xiàn)實(shí)中,如果使用對稱加密,客戶端和服務(wù)端都需要保存大量的加密算法和對應(yīng)的密鑰,管理成本巨大且容易泄漏。
讓 Polly 抱個(gè)密碼箱
李雷和韓梅梅想出來了一個(gè)復(fù)雜的通信流程:
- 李雷先讓 Polly 不帶情書飛到韓梅梅家;
- 韓梅梅在 Polly 身上綁一個(gè)開著的密碼箱,密碼只有韓梅梅知道,然后讓 Polly 飛回去;
- 李雷在 Polly 回來的時(shí)候,把情書放進(jìn)去,把密碼箱鎖起來,讓 Polly 再飛到韓梅梅家;
- 韓梅梅拿到密碼箱,打開,拿到情書,掩面嬌羞;
Polly 內(nèi)心旁白,MMP,你們談個(gè)戀愛累死老子了 ...
就通過這樣的流程,他們安全的談情說愛,Jim Green 無計(jì)可施 ...
插播科普 上面這種加密方式是非對稱加密,非對稱的含義相對于對稱來說,就是你即使知道怎么加密的的方式,也不知道怎么解密,對應(yīng)上面的流程就是李雷鎖的密碼箱卻沒辦法打開。
術(shù)語來講的話,就是我們熟知的公鑰和私鑰,服務(wù)端將公鑰(密碼箱)發(fā)送給客戶端,客戶端使用公鑰加密信息(鎖箱子),服務(wù)端接受消息后使用私鑰(僅韓梅梅知道的密碼)解密。
密碼箱安全嗎
然而問題還沒有結(jié)束 ...
李雷拿到開著的密碼箱,如何確定這個(gè)密碼箱就是韓梅梅讓 Polly 帶過來的?Jim Green 能截消息,也能截密碼箱然后換成自己知道知道密碼的密碼箱呀,這樣的話,通信同樣不安全(即公鑰來源的安全性)。
李雷必須要知道箱子是不是韓梅梅的,于是韓梅梅想到一個(gè)辦法,她在密碼箱上簽上自己的名字,當(dāng)李雷拿到盒子的時(shí)候,就可以看簽名是不是韓梅梅的從而決定是否安全。
然而,還又同樣的問題,Jim Green 同樣也能偽造簽名呀 ...
惡魔李雷:媽蛋的,這戀愛老子不談了!
天使李雷:山無棱天地合乃敢與君絕
天使戰(zhàn)勝了惡魔,故事繼續(xù) ...
公信
我們需要一個(gè)有公信力的人 -- 鄭叔 -- 來代替簽名,他是大家公認(rèn)的好人,只會給認(rèn)證過的合法的人簽名,簽名的密碼箱的來源都確實(shí)就是需要簽名的本人。
這樣,Jim Green 就不能換箱子和偽造簽名了,一旦沒有鄭叔的認(rèn)證,李雷就可以斷定這不是韓梅梅的箱子,不安全。
同樣,術(shù)語上,鄭叔就是 Certification Authority,認(rèn)證機(jī)構(gòu),有權(quán)利頒發(fā)證書(簽名)。
在這個(gè)關(guān)系鏈中,信任 CA 是基礎(chǔ),因?yàn)椋鋵?shí)也會有 CA 告訴你他自己是安全的,他會給自己頒發(fā)證書。對應(yīng)例子中,就是如果 Jim Green 也是個(gè)有公信力的人然后給自己簽名那就沒得玩了,但是我們“相信” CA 都不會做這樣的壞事,所以 Jim Green 不會是 CA.
Polly 好累
對比最初的消息,我們?yōu)榱税踩緛碇挥盟鸵环庑?,卻加了一個(gè)密碼箱和一個(gè)簽名,運(yùn)輸成本重多了,Polly 累了,不開心了 ...
于是,他們決定,消息體還是以凱撒加密的方式傳輸,然后偏移步長用鄭叔簽名的保險(xiǎn)箱發(fā)送,這樣就可以平衡消息的安全性和傳輸?shù)某杀締栴}。
術(shù)語解釋就是非對稱加密會影響傳輸速度,因?yàn)橄Ⅲw變大了,所以通常綜合性能和安全性考慮,會用對稱加密消息體,非對稱加密用來編碼對稱加密的密鑰。
結(jié)語
故事中通信的過程其實(shí)就是原始的 HTTP 到 HTTPS 的演進(jìn)過程,當(dāng)然隱藏了真實(shí)通信的很多細(xì)節(jié),比如三次握手 ... 但是大體上描述了原理和部分細(xì)節(jié)。
去探索更多關(guān)于 HTTPS 的原理 & 申請證書改造你的網(wǎng)站吧 ...