天天看點

計算機網絡延申(一) HTTPS

這篇文章,我們将從 HTTP 明文傳輸開始,一步步講解 HTTPS 是怎麼在 HTTP 的基礎上實作加密通信的

1、明文傳輸(HTTP)

一開始的時候,HTTP 設計的初衷隻是解決了通信的問題,是以資料是明文傳輸的

在這種情況下,一些不懷好意的人很容易在雙方不知情的情況下,竊取資料

要保證資料不被竊取,唯一的辦法就是給傳輸的資料加密

這樣即使别人竊取到資料,也不知道傳輸的内容,因為他獲得的隻是一堆看起來無意義的亂碼

2、對稱加密

(1)對稱加密

通信雙方約定一個密鑰,這個密鑰隻有通信雙方知道,用這個密鑰加密的資料,隻有用這個密鑰才能夠解密

(2)對稱加密的問題

對稱加密有一個問題,這個問題出現在通信過程的開始,那就是通信的雙方要怎麼約定密鑰

假如密鑰是通過網絡傳輸的,那麼很可能這個密鑰在一開始就被别人竊取

3、非對稱加密

(1)非對稱加密

要通信的主機首先産生一對密鑰(一個公鑰和一個私鑰),其中公鑰是大家都知道的,私鑰是隻有才自己知道的

用公鑰加密的資料,隻有用對應的私鑰才能解密,用私鑰加密的資料,隻有用對應的公鑰才能解密

(2)非對稱加密的問題

非對稱加密也有一個問題,這個問題和對稱加密的問題有點相似,就是公鑰怎麼安全地交到對方手上

假如也是通過網絡傳輸,那麼公鑰有可能被替換(中間人攻擊)

非對稱加密解決了密碼被竊取的問題,因為公鑰是大家都知道的,不存在被誰竊取的問題

現在的問題在于怎麼證明 “你就是你”(Alice 怎麼知道和自己通信的是 Bob 而不是 Hacker)

4、數字簽名

我們暫且抛開上面的問題不談,先來讨論一下數字簽名技術

數字簽名的出現主要是為了解決兩個問題,一是驗證内容是否被篡改,二是确定内容是誰生成的

它具體是怎麼做到的呢?不急,我們先來看一下使用數字簽名的兩個過程,生成簽名和驗證簽名

  • 生成簽名

    發送方使用雜湊演算法對資料生成一段摘要,然後用自己的私鑰對摘要加密,形成一個數字簽名

    将數字簽名附加在資料的後面,一起發送給接收方

  • 驗證簽名

    接收方收到後,重新使用雜湊演算法對資料生成一段摘要 1,同時使用發送方的公鑰解密數字簽名得到摘要 2

    對比摘要 1 和摘要 2 是否相同,如果相同就說明内容沒有被修改

怎麼驗證内容沒有被修改,看完上面的兩個過程相信大家也已經知道,那麼确定内容是誰生成的又是怎麼做到的呢

我們注意到一個細節,對摘要進行加密使用的是發送方的私鑰,而私鑰是自己才有的,這就是唯一性的證明

由于私鑰隻有自己知道,也就是說隻有自己才能簽名,而公鑰是大家都知道的,是以大家都能驗證簽名

實際上,數字簽名是正常的非對稱加密的逆應用,在數字簽名中,使用私鑰加密,使用公鑰解密

5、數字證書

好,我們重新回到之前的問題,怎麼證明 “你就是你”,問題的本質其實是公鑰怎麼安全分發

這時候數字證書就可以派上用場,數字證書是由權威機構頒發給伺服器的身份憑證,其實就相當于我們的身份證

伺服器拿着身份證就可以證明 “我就是我,是獨一無二的煙火”,并且通過數字證書我們還能安全的分發公鑰

下面我們先來看看一個伺服器是怎麼申請證書的,以及用戶端是怎麼根據證書得到可信的公鑰的

  • 伺服器申請證書

    伺服器向權威機構(Certificate Authority,簡稱 CA)申請一個證書

    權威機構把伺服器使用的公鑰、伺服器的資訊、權威機構的資訊等作為原始資料

    權威機構用雜湊演算法對原始資料計算一個哈希值,然後用自己的私鑰加密原始資料,得到數字簽名

    權威機構把數字簽名附加在原始資料後,得到數字證書

    權威機構傳回數字證書給伺服器

  • 用戶端驗證證書

    用戶端收到伺服器的數字證書

    用戶端得到該數字證書的頒發機構的公鑰,并用公鑰解密數字簽名,得到原始資料的哈希值

    用戶端用雜湊演算法對數字證書的原始資料計算一個哈希值

    如果兩個哈希值相同,說明數字證書沒有被修改,這樣就可以得到伺服器的公鑰

針對上面的兩個過程,我們來回答幾個問題

1、為什麼數字證書不能僞造?

因為數字證書包含權威機構的數字簽名,數字簽名的特點就是隻有自己才能簽名,但是大家都能驗證簽名

2、為什麼權威機構是可信的?

這個問題真要從密碼學的角度的确難講,但是這個道理就相當于在現實生活中我們為什麼要相信銀行一樣

3、在驗證證書時,需要使用到權威機構的公鑰,這個公鑰是怎麼傳輸的?

又回到這個問題,公鑰怎麼安全分發,按照以前的思路,就是讓另一個權威機構給這個權威機構頒發證書

那這就是一個無限遞歸,怎麼搞呀?要想結束遞歸,那就要給遞歸設定初始條件

權威機構是一個樹狀分層的結構,高層的權威機構會給低層的權威機構頒發證書

某些頂層權威機構的證書會内置在作業系統或浏覽器中,預設使用的人自動相信他們

6、對稱加密 + 非對稱加密 + 數字簽名 + 數字證書(HTTPS)

兜兜轉轉,一路過來,終于到最後一步了

把我們之前講的對稱加密、非對稱加密、數字簽名、數字證書綜合應用起來,就是 HTTPS 所使用的加密技術

最後,我們把這些東西串聯起來,講一下 HTTPS 通信的全過程

  1. 用戶端請求建立加密連接配接
  2. 伺服器給用戶端發送證書
  3. 用戶端檢視證書的有效日期,如果證書已經過期,那麼提示失效,如果證書沒有過期,繼續下面步驟
  4. 用戶端檢視證書的頒發機構

    如果用戶端知道這個頒發結構,那麼就會用對應的公鑰驗證證書,得到服務端的公鑰

    若用戶端不知道這個頒發機構,那麼就會提示這個證書存在風險,讓使用者選擇是否要相信這個證書

  5. 如果驗證通過,也就意味着用戶端已經得到服務端的公鑰

    那麼用戶端随機生成一個對稱密鑰,并用服務端的公鑰加密,發送給服務端

  6. 服務端收到後,用自己的私鑰解密,得到對稱密鑰
  7. 此時,雙方都已知道對稱密鑰 ,之後用它進行加密通信

【 閱讀更多計算機網絡系列文章,請看 計算機網絡複習 】