漫畫:用故事說透 HTTPS

本文首發於個人公衆號:素燕 用故事說透 HTTPS前端

故事中的主演:算法

小華今年上大一,這是她第一次離開父母,獨自一人到北京上學。今天媽媽的生日,想了想要給媽媽一個祝福,便給媽媽發了條消息:瀏覽器

媽媽收到這條消息很是開心,女兒這麼忙還能記得本身的生日,兩我的便開始聊了起來。媽媽知道女兒一直省吃儉用,決定給女兒打點錢過去。安全

小黑是個黑客,專搞一些「偷雞摸狗」的事情,他已經監聽了這對母女的對話。一直看着她們嘮家常,都快睡着了。socket

直到看到母女提到錢的事情,立馬打起精神,決定搞一筆。而後他截獲了小華的消息,替換成本身精心準備的內容給小華的媽媽發過去了。學習

小華的媽媽隨後就把錢打給了小華,不曾想到母女二人的聊天內容盡在小黑的掌控之中。小黑拿到錢後就溜之大吉了。ui

「公衆號素燕注:HTTP 協議是創建在 TCP 之上的,TCP 是否安全決定了 HTTP 是否安全。HTTP的報文內容並未加密,容易被監聽和篡改。小黑就監聽了母女二人的聊天內容,並對內容進行了篡改,假裝成女兒進行聊天。因此 HTTP 有如下 3 個問題:加密

1.內容未加密,容易被監聽,都是明文傳輸; 2.沒法驗證內容的完整性,容易被篡改,也就是說不知道消息是否是被修改過; 3.沒法驗證對方的身份,我如今聊天的人是誰,可靠嗎?」3d

小華被騙後,內心很難過,把這件事告訴了她的計算機老師王大強。王老師聽到被騙的經歷,感到很是驚訝,消息爲何會被篡改呢!立馬查看了她們使用的聊天軟件,原來這個軟件直接使用的是 TCP 協議,沒有作安全措施。cdn

研究完軟件後,大強對小華說:「這款軟件有問題,之後別用了,要用具備安全措施的軟件,好比使用 TLS/SSL 協議的軟件」。

小華說:「什麼是 TLS/SSL 呢?」。大強看到小華誠懇的表情,決定把 HTTPS 的原理告訴她,可是想到她可能理解不了,而後決定剖析一下她和媽媽被騙的場景。 既然小華和她媽媽的聊天內容是明文傳輸的,那直接把內容加密不就完事了嗎。小華和她媽媽就約定了一個密碼,全部的內容都經過這個密碼進行加密和解密。

「公衆號素燕注:這種加密方式稱爲對稱加密,加密解密都是經過同一個密碼來操做,因此須要保證密碼的安全,一旦泄露,後果很嚴重」 小華立馬覺察到事情的不妙,密碼如何才能傳給她媽媽呢。只能雙方見面後來約定一個密碼。可是她想到遠在美國的爸爸,若是向他要錢的話,須要飛往美國把密碼告訴他。這太麻煩了。

王大強老師說:「別急,還有更好的方法」。那就使用兩個密鑰,一個用來加密(稱爲公鑰),另外一個用來解密(稱爲私鑰),使用公鑰加密過的內容,只能經過私鑰進行解密。私鑰只有本身有,公鑰能夠丟給別人。

小華和媽媽,只把公鑰交給對方就行。小華給媽媽發消息的時候,用媽媽的公鑰進行加密,私鑰只有媽媽有,也就是說只有媽媽能解密。

「公衆號素燕注:這種加密方式稱爲非對稱加密,會有二個鑰匙,一個鑰匙加密過的內容只能經過另外一個鑰匙進行解密。至於爲啥要說私鑰加密公鑰解密,雖然兩個鑰匙均可以進行加密解密,可是私鑰加密公鑰解密這種說法不是更好理解嗎?公鑰被人都知道,私鑰只有本身知道」。

小華想了想以爲仍是有點不安全,假如她和媽媽進行交換公鑰的時候,被小黑監聽了。 小華把本身的公鑰 xiaohua_pub 發給媽媽,中途被小黑掉包了,小黑把本身的公鑰 xiaohei_pub 發給了小華的媽媽。這樣小華媽媽發消息的時候就使用了小黑的公鑰進行了加密,小黑獲取到消息表能夠用本身的私鑰進行解密。

媽媽發送本身的公鑰給小華的時候也被小黑掉包了,這時小黑就有了雙方的公鑰。

小黑監聽到小華要求媽媽打錢的消息,對消息進行了篡改。

王大強老師聽完小華的疑慮,豎起了大拇指,說道:「別急,聽我慢慢解釋」。

如今的問題是出在交換公鑰的時候被小黑調包了,那接下來就須要解決這個問題。如何才能把公鑰安全地送到對方手上。

這彷佛是永遠解不了的問題,畢竟公鑰始終是要通過傳輸的。這彷佛是一個雞生蛋蛋生雞的問題。後來小華想了想他平時網上購物的時候,之前老是擔憂怕付款了,商家跑路不給發貨,自從有了淘寶這個第三方機構,畢竟阿里家大業大,值得信賴,即便商家跑路了能夠找淘寶。

後來就出現了關於公鑰的認證機構,這些認證機構不多,但很是權威,它會和電腦、瀏覽器等廠商達成信任關係,提早把認證機構的公鑰安裝到系統中,這樣就不會涉及到傳輸的問題了。

在聊天的過程當中,小華髮現消息發送和接收的時候很慢,後來發現由於是加密算法耗費比較長的時間。小華想了想,使用對稱加密的時候,惟一的缺點是交換祕鑰比較麻煩,可是速度很是快。那麼能夠經過非對稱加密來傳輸對稱加密的密鑰,密鑰傳輸成功後,使用對稱加密來加密消息。

到此,你理解如何保證通訊安全了嗎?

「公衆號素燕注:HTTP 屬於應用層協議,HTTPS 並非一個新的協議,它只是比 HTTP 協議多了一層(TLS/SSL)來保證數據傳輸安全。TLS/SSL也屬於協議,它的主要做用是保證數據傳輸安全。大多數使用的是 OpenSSL 來實現,好比 Node 中的 TLS 就是基於 OpenSSL 實現的」。

總結

本文以故事的形式介紹了 HTTP 的不安全,保證 HTTPS 安全性的背後支持,包含數字證書、數字簽名、對稱加密、非對稱加密的概念,固然光有理論還不行,須要實踐才能更好地理解。你們加油。

若是你喜歡用故事說透技術,能夠看個人另一篇文章:打破討論薪資的紅線 之 簽名原理(漫畫)

推薦閱讀:

相關文章
相關標籤/搜索