Fiddler抓取HTTPS協議

HTTPS協議握手過程:算法

1,客戶端明文請求,把本身支持的非對稱加密算法(用於使用CA證書公鑰加密計算生成協商密鑰的隨機數per_master)、對稱加密算法(用於之後使用協商密鑰加密傳輸內容)、驗證數據完整性的HASH算法、隨機數Random_C發給服務器。瀏覽器

2,服務器發回客端的明文信息,包含選擇一套加密算法、HASH算法、CA證書、隨機數Random_S。CA證書中包含服務器地址、公鑰、證書頒發機構信息和簽名。服務器

3,客戶端作五件事:  dom

  a)對證書合法性、證書中包含的地址與正在訪問的地址是否一致等進行校驗;測試

  b)生成一串隨機數密碼pre_master,並使用服務器選擇的非對稱加密算法和CA證書裏的公鑰對pre_master加密,獲得enc_pre_master;加密

  c)計算協商密鑰enc_key=Func(random_C,random_S,pre_master);spa

  d)使用約定好的HASH驗證算法計算握手信息,用協商密鑰enc_key及約定好的加密算法對握手消息加密。ast

  e)客戶端發送enc_pre_master、贊成使用約定的算法和協商密鑰通訊、加密的握手信息給服務器。隨機數

4,服務器收到數據作五件事:請求

  a)用本身的私鑰解密enc_pre_master,獲得pre_master;

  b)計算協商密鑰enc_key=Func(random_C,random_S,pre_master);

  c)使用協商密鑰enc_key和約定的解密算法解密握手信息,並驗證HASH與客戶端發來的是否一致;

  d)生成握手消息,使用協商密鑰enc_key與約定好的加密算法加密握手消息,發給客戶端。

5,客戶端用協商密鑰解密握手消息,計算HASH,若是HASH與服務器發來的一致,握手結束。

此後,全部通訊數據將用對稱密鑰enc_key及約定好的對稱加密算法進行加密解密。

這裏客戶端與服務器互發加密的握手消息並驗證,是爲了保證雙方都得到了一致的密鑰enc_key,而且能夠正常的加密解密數據,爲真正數據的傳輸作一次測試。

 從上面的過程能夠看到,enc_key是最終的通訊密鑰,獲得了瀏覽器生成的pre_master,就獲得了enc_key,就能夠解密HTTPS報文。

 

Fiddler截獲HTTPS協議過程:

1,F截獲瀏覽器發給服務器的HTTPS請求,假裝成瀏覽器向服務器發送請求進行握手。

2,服務器發回響應,獲取到CA證書,用根證書公鑰進行解密,驗證服務器簽名,獲取到服務器CA證書公鑰。而後F僞造本身CA證書,冒充服務器證書給客戶端瀏覽器。

3,瀏覽器對返回的數據進行校驗、生成pre_master、用F僞造的證書公鑰加密生成enc_pre_master,並生成enc_key。

4,瀏覽器將重要數據返回給服務器時,又被F截獲。F將截獲的密文用本身僞造證書的私鑰解開,獲得enc_pre_master,計算出對稱密鑰enc_key。F將enc_pre_master用服務器證書公鑰加密傳給服務器。

5,服務器用私鑰解開數據,創建信任,再發送加密握手消息給客戶端。

6,F截獲服務器發來的密文,用服務器公鑰解開,再用本身僞造證書的私鑰加密傳給瀏覽器。

7,瀏覽器獲得加密信息,用僞造證書的公鑰解開,驗證HASH,握手正式完成。

此後,瀏覽器和服務器之間的消息都是用對稱密鑰enc_key加密和解密,F知道這個enc_key,因此整個HTTPS信息對F是透明的。

 這個過程裏,瀏覽器承認F僞造的CA證書是關鍵,因此對僞造CA證書籤名的根證書是關鍵。因此係統裏要安裝這個F僞造的根證書。

相關文章
相關標籤/搜索