2018-02-02html
目錄git
1 HTTPS握手過程
2 Fiddler抓取HTTPS過程
3 Fiddler抓取HTTPS設置
參考算法
數字簽名是什麼?瀏覽器
HTTPS 並不是是應用層的一種新協議。只是 HTTP 通訊接口部分用 SSL (安全套接字層)和TLS (安全傳輸層協議)代替而已。即添加了加密及認證機制的 HTTP 稱爲 HTTPS ( HTTP Secure )。安全
HTTPS = HTTP + 認證 + 加密 + 完整性保護服務器
握手過程以下:dom
第一步:客戶端發起明文請求:將本身支持的一套加密規則、以及一個隨機數(Random_C)發送給服務器工具
第二步:服務器選出一組加密規則和hash算法,並將本身的身份信息以證書(CA:包含網站地址、加密公鑰、證書頒發機構等信息)和一個隨機數(Random_S)發給客戶端測試
第三步:客戶端接到服務器的響應網站
驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等)。若是證書受信任,則瀏覽器欄裏面會顯示一個小鎖頭,不然會給出證書不受信的提示。
若是證書受信任,或者是用戶接受了不受信的證書,客戶端作如下事情:
第四步,服務器接收客戶端發來的數據要作如下四件事情:
第五步,客戶端拿到握手信息解密,握手結束。
客戶端解密並計算握手消息的HASH,若是與服務端發來的HASH一致,此時握手過程結束。
第六步,正常加密通訊
握手成功以後,全部的通訊數據將由以前協商密鑰enc_key及約定好的算法進行加密解密。
這裏瀏覽器與網站互相發送加密的握手消息並驗證,目的是爲了保證雙方都得到了一致的密碼和hash算法,而且能夠正常的加密解密數據,爲後續真正數據的傳輸作一次測試。
從握手過程,咱們能夠得知:
hash算法確保
咱們都知道,Fiddler是個很好的代理工具,可抓取協議請求用於調試。
Fiddler抓取HTTPS協議主要由如下幾步進行:
第一步,Fiddler截獲客戶端發送給服務器的HTTPS請求,Fiddler假裝成客戶端向服務器發送請求進行握手 。
第二步,服務器發回相應,Fiddler獲取到服務器的CA證書, 用根證書(這裏的根證書是CA認證中心給本身頒發的證書)公鑰進行解密, 驗證服務器數據簽名, 獲取到服務器CA證書公鑰。而後Fiddler僞造本身的CA證書(這裏的CA證書,也是根證書,只不過是Fiddler僞造的根證書), 冒充服務器證書傳遞給客戶端瀏覽器。
第三步,與普經過程中客戶端的操做相同,客戶端根據返回的數據進行證書校驗、生成密碼Pre_master、用Fiddler僞造的證書公鑰加密,並生成HTTPS通訊用的對稱密鑰enc_key。
第四步,客戶端將重要信息傳遞給服務器, 又被Fiddler截獲。Fiddler將截獲的密文用本身僞造證書的私鑰解開, 得到並計算獲得HTTPS通訊用的對稱密鑰enc_key。Fiddler將對稱密鑰用服務器證書公鑰加密傳遞給服務器。
第五步,與普經過程中服務器端的操做相同,服務器用私鑰解開後創建信任,而後再發送加密的握手消息給客戶端。
第六步,Fiddler截獲服務器發送的密文, 用對稱密鑰解開, 再用本身僞造證書的私鑰加密傳給客戶端。
第七步,客戶端拿到加密信息後,用公鑰解開,驗證HASH。握手過程正式完成,客戶端與服務器端就這樣創建了」信任「。
在以後的正常加密通訊過程當中,Fiddler如何在服務器與客戶端之間充當第三者呢?
服務器—>客戶端:Fiddler接收到服務器發送的密文, 用對稱密鑰解開, 得到服務器發送的明文。再次加密, 發送給客戶端。
客戶端—>服務端:客戶端用對稱密鑰加密,被Fiddler截獲後,解密得到明文。再次加密,發送給服務器端。因爲Fiddler一直擁有通訊用對稱密鑰enc_key, 因此在整個HTTPS通訊過程當中信息對其透明。
從上面能夠看到,fiddler至關於代理,客戶端和服務器交互都要經過fiddler,Fiddler抓取HTTPS協議成功的關鍵是根證書(根證書是CA認證中心給本身頒發的證書,是信任鏈的起始點。安裝根證書意味着對這個CA認證中心的信任。),這是一個信任鏈的起點,這也是Fiddler僞造的CA證書可以得到客戶端和服務器端信任的關鍵。
沒有受信任的fiddler根證書,不能讓客戶端相信fiddler僞造的CA證書,從而獲得Pre_master。
接下來咱們就來看若是設置讓Fiddler抓取HTTPS協議。
Fiddler菜單->Tools->Telerik Fiddler Options
在跳出的對話框點擊‘Yes’
在跳出的對話框點擊‘是(Y)’後,經過IE的Internet選項,咱們能夠看到Fiddler的根證書被加入到「受信任的根證書頒發機構」。
[2] HTTPS的工做原理