關於HTTPS,你需要知道的全部

首先來看一種場景:小紅髮信息約小明放學後去電影。

正常的信息流動是這樣的:

1.小紅 -> 放學後去看電影吧? -> 小明
2.小明 -> 好,校門口等我。 -> 小紅

但如果存在一箇中間人把小紅和小明的信息攔截,並做了修改,信息流變成了下面這樣:

1.小紅 -> 放學後去看電影吧?-> 中間人(你) -> 今天上課有點累,放學我就回家了,不要等我。 -> 小明
2.小明 -> 好吧,好好休息。 -> 中間人(你) -> 不去了,放學後我就回家。 -> 小明

小紅以爲小明不陪自己看電影,小明以爲小紅放學就回家了,而你就找了個理由約上小紅去看電影了。

之所以會產生誤解,是因爲小紅和小明沒辦法驗證對方信息的真假,都以爲收到了對方的正確信息,這是個典型的中間人攻擊的例子。

HTTPS正是要解決這個問題,在HTTP傳輸層之上加了一個安全層(SSL或TLS協議實現),可以做到以下3點:

  • **數據的保密性 **
  • 校驗雙方身份的真實性
  • 數據的完整性

下面來看https是如果解決這3個問題的。

一、數據的保密性

數據要保密,就需要對數據進行加密。加密算法可以分爲2類,一類是對稱加密算法,另一類是非對稱加密算法。

對稱加密算法,加密和解密使用相同的密鑰,優點是加密速度快,缺點是如果密鑰泄露的話就無法做到保密了。常見的對稱加密算法有DES、AES等。

非對稱加密算法,又叫公開密鑰加密。需要有2個密鑰,公鑰和私鑰,公鑰向所有人公開,私鑰不公開。用公鑰加密的數據只有私鑰才能解密;反之,用私鑰加密的數據只有公鑰才能解密。因爲這種特性,非對稱加密算法可以用來校驗數字簽名,下面會具體講解。

很顯然,僅使用對稱加密算法是不現實的,互聯網中通信的雙方大多是臨時建立的連接,不可能提前協商好密鑰,而且密鑰也要進行傳輸,無法保證密鑰本身的安全性。

如果使用非對稱加密,客戶端向服務器發送數據是安全的,客戶端用服務器的公鑰進行加密,只有服務器用自己的私鑰才能解密。但如果服務器用私鑰對數據進行加密,則所有人都可以用公鑰進行解密,這是不安全的。

HTTPS的解決方案是這樣的:用非對稱算法隨機加密出一個對稱密鑰,然後雙方用對稱密鑰進行通信。具體來說,就是客戶端生成一個隨機密鑰,用服務器的公鑰對這個密鑰進行非對稱加密,服務器用私鑰進行解密,然後雙方就用這個對稱密鑰來進行數據加密了。

二、校驗雙方身份的真實性

上面說了加密,保證了數據不能被他人讀取,但通信的雙方怎樣校驗對方的身份呢?HTTPS使用了數字證書,數字證書就是身份認證機構(Certificate Authority)蓋在數字身份證上的一個章或印(或者說加在數字身份證上的一個簽名),這一行爲表示身份認證機構已認定這個人。證書的合法性可以向CA驗證。

數字證書主要包含以下信息:

  • 證書頒發機構
  • 證書頒發機構簽名
  • 證書綁定的服務器域名
  • 證書版本、有效期
  • 簽名使用的加密算法(非對稱算法,如RSA)
  • 公鑰

客戶端收到服務器的響應後,先向CA驗證證書的合法性(根據證書的簽名、綁定的域名等信息),如果校驗不通過,瀏覽器會中止連接,向用戶提示證書不安全。

需要提一點的是,證書的製作方法是公開的,任何人都可以自己製作證書,所以有些公司不向CA申請,比如12306。但自己製作的證書是得不到CA認證的,所以訪問12306網站時,瀏覽器會有證書不合法的提示,如下圖,只有用戶選擇信任該網站時,才能繼續訪問。

證書校驗不合法提示

三、數據的完整性

網絡傳輸過程中需要經過很多中間節點,雖然數據無法被解密,但可能被篡改,那如何校驗數據的完整性呢?通過校驗數字簽名,流程見下圖:

數字簽名校驗

首先來了解下哈希算法,哈希算法能夠將任意長度的字符串轉化爲固定長度的字符串,該過程不可逆,可用來作數據完整性校驗。

服務器在發送報文之前做了3件的事:

  • 用哈希算法對報文提取定長摘要
  • 用私鑰對摘要進行加密,作爲數字簽名
  • 將數字簽名附加到報文末尾發送給客戶端

客戶端接收到報文後:

  • 用公鑰對服務器的數字簽名進行解密
  • 用同樣的算法重新計算出報文的數字簽名
  • 比較解密後的簽名與自己計算的簽名是否一致,如果不一致,說明數據被篡改過。

同樣,客戶端發送數據時,通過公鑰加密報文摘要,服務器用私鑰解密,用同樣的方法校驗數據的完整性。

HTTPS通信的大致過程

HTTPS通信過程
  1. 客戶端將自己支持的加密算法發送給服務器,請求服務器證書;

  2. 服務器選取一組加密算法,並將證書返回給客戶端;

  3. 客戶端校驗證書合法性,生成隨機對稱密鑰,用公鑰加密後發送給服務器;

  4. 服務器用私鑰解密出對稱密鑰,返回一個響應,HTTPS連接建立完成;

  5. 隨後雙方通過這個對稱密鑰進行安全的數據通信。

思考

通過HTTPS,客戶端一旦發現證書不合法或者數據被篡改,就是中止連接,文章開頭說的中間人攻擊就無效了。



下一篇介紹抓包工具是如何抓取HTTPS請求的?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章