https與http區別以及https資料加密解密過程

愛在南信發表於2019-03-02

  之前只是去了解了https零散的知識,只是大體知道比http安全。但是其中資料互動的來龍去脈,不是很清楚。藉助今天的一篇文章總結一下自己的理解。原文可以參考: https://mp.weixin.qq.com/s/7rn4ruT2KemKRJRUkCwyfA

https出現的背景

大家都知道http協議是"明文"傳輸。 在網際網路中,資料要從A到D一定會經過許許多多的網路路由器,http資料其實在每個路由器上都能看得清清楚楚,毫無隱私可言。 http協議帶來的3個重要的安全問題:

  1. 資料被篡改
  2. 被監聽
  3. 身份偽裝

https的出現就是要解決上面3個面臨的問題。

資料被篡改

  關於這個問題,其實很多人都能想到。雙方A與D只要通過對稱加密,把明文變成密文傳輸即可。相信大家諜戰劇應該都看過不少, 其中有一部印象比較深刻。大致講的是,我黨地下組織有2名同志(A和D)是某個省的老鄉,他們地方的方言晦澀難懂,於是兩人約定在摩斯密碼發電報的時候,都用他們及其難懂的方言進行溝通,這樣小日本就算截獲電報也是一臉懵逼,破譯不了。上面例子其實就是一個對稱加密的過程, 金鑰就是"A與D的方言",假設小日本知道是他們使用的金鑰,那麼自然電報也就被破解了。
   現在回到http請求來進行對照。 A要訪問D的網站(其實也就是A與D進行通訊, A是客戶端瀏覽器,D是服務端)。A首先傳送一個對稱加密演算法xx告訴D,我們後面都用這種xx加密演算法通訊。 D收到知道了,下次A傳送資訊過來就使用xx金鑰解密就可以了。 但是由於http是明文傳輸, 假如第一次,A傳送給D關於對稱加密xx金鑰被截獲,那麼後面A與D的通訊也就被破解了。此時 截獲報文的"中間人"可以修改傳遞的資料, 也可以看著你倆(A和D)都在說些啥(我就看看,不說話)。

1.被監聽

  http是明文並且從A到D假如經過2個路由器(B,C).最後才到達D. 那麼B和C只要可以監聽A和D的通訊, 你們在說什麼,聊天內容是什麼都一覽無遺。是不是很恐怖?

2.偽裝

  這個也很容易理解。A本來想訪問D的網站, 經過C的時候,C把資訊攔下來了不發給D了。直接和A聊天,假裝自己就是D。通訊的過程中,只要C說話的語氣和D相差不大的話,A是不會察覺到的。

3.解決方案

  1.首先我們可以用非對稱加密的方式,給我們的報文加密。 D給A傳送"我的公鑰是D_pub_key", 之後,A使用D_pub_key加密了通訊內容"你好,我是A"的資訊,再發給D,D使用私鑰解開加密內容。得到資訊是 “你好,我是A”. 但是還是那個問題,第一次D傳送給A公鑰的資訊還是明文的, C也可以冒充D直接把C的公鑰C_pub_key發給A。A以為是D發給他的,所以就用C_pub_key(此時A誤以為這個公鑰是D的)加密了通訊內容,然後發給了C. C用自己的私鑰解密,就知道了通訊內容。所以到此我們只是把通訊的加密方式從對稱加密改為了非對稱加密而已。

  2.為了保證通訊雙方A和D彼此的身份是可靠的,那麼A怎麼才能知道D是不是真實的呢? 這要依賴於"信任鏈"。 例如E是專業做背景調查的機構(幾乎所有人都相信E說的話),A十分信賴E. A說我誰都不信,我只相信E。E說誰是真實的就是真實的,說你是冒充的就是冒充的。 那麼只要E機構對D做出充分認真,仔細,嚴格的篩選,驗證身份,背景調查等等。最後確認了D是可信任的。 由於A信任E,那麼E跟A說D是可信任的,那麼A就會相信D確實是可信任的。E這樣的機構被稱之為"CA機構"。 首先D先向CA機構提供自己的身份證明,例如域名叫什麼,域名註冊資訊,等等。 只要通過CA的各種驗證,最後CA會給你兩樣東西。 一個是你網站D用於加密的私鑰D_private_key。 還有一個.crt的"證書"檔案(包含了機構用自己的公鑰CA_private_key加密了你的公鑰D_public_key資訊,以及根據你網站的資訊生成的"數字簽名", 還有CA機構自身的資訊)。這樣在C要請求D網站的時候,D不會像當初一樣直接給C傳送公鑰D_public_key,而是給C傳送"CA證書"。C瀏覽器端拿到"CA證書"之後, 由於 絕大多數瀏覽器廠商諸如Chrome , 火狐等都在本地客戶端維護了眾多權威CA機構的公鑰CA_public_key。這樣 瀏覽器用CA_public_key解密證書資訊,然後根據生成數字簽名的演算法,生成數字簽名拿去和證書裡面的數字簽名對比,是否一致,校驗證書的有效性。 證書驗證成功之後, C就可以拿D_public_key,使用其加密自己要傳送的通訊內容以及對稱加密方式給D, D拿到後使用D_private_key解密,拿到對稱加密金鑰,進而解密得出明文資訊。

  通過上述的過程。https會保證通訊雙發的身份(依靠CA證書), 資料通過非對稱加密對報文加密從而也預防了報文被篡改的情況, 至於監聽者看到的都是密密麻麻的密文,自然也束手無策。自己需要多加思考和理解也許才能理清楚。諸如你的瀏覽器就是C, D是淘寶網(www.taobao.com).你在淘寶輸入的賬號,密碼等資訊都會安全的經過眾多網路路由器,最終到達淘寶的伺服器。 在途中這些路由器,看不懂你的資訊,因為都是被加密過了。 (修改也沒用,根本不知道意思,能修改什麼?) 這樣確保了你的資訊真實地傳送給了淘寶網。 那麼會不會有人想做釣魚網站,做了和淘寶一模一樣的頁面讓你輸入賬號和密碼? 會。 但是,首先假如是DNS劫持這種隱蔽性最高, 在你經過的DNS直接改為了www.taobao.com的ip指向了自己的釣魚網站,當你在url上看到www.taobao.com的時候十分相信,這就是真的淘寶網。其實不一定。 但是 你要確信, 此時url上絕對不會是https://協議開頭並且你的瀏覽器可能會提示你,你正在瀏覽的網站不安全。 因為在https的淘寶上的crt證書和私鑰冒充者拿不到, 導致了證書驗證失敗。因為冒充者自頒發證書的私鑰不是任何CA機構的私鑰,所以在瀏覽器端沒有任何一個CA機構的公鑰能解開所謂的"冒充的證書",證書校驗第一步就失敗了。 足以證明就是一個假冒的釣魚網站。 所以在瀏覽一些十分正規的網站,出名的網站時假如就算url顯示https,瀏覽器會提示證書有問題,這時候就要小心了。 這種情況遇到很少,不過注意自身安全總歸是好事。

相關文章