【轉】HTTPS淺析與抓包分析

老D
老D
老D
701
文章
4604
評論
2017-10-1720:09:12來源:LSABLOG 14 27,765 2443字閱讀8分8秒

0x00?HTTP之殤

  • 數據明文傳輸,易嗅探
  • 數據完整性無驗證,易篡改
  • 網站身份無認證,易假冒

由此誕生HTTPS。

 

0x01?什么是HTTPS

HTTP?+?SSL/TLS

TLS是SSL的升級版

二圖勝千言:

//圖片來源于網絡

【轉】HTTPS淺析與抓包分析

【轉】HTTPS淺析與抓包分析

作用:防嗅探,防篡改,身份認證

 

0x02?https握手過程

建立https連接(明文),再用對稱加密傳輸數據。

TCP三次握手

C->S:[client?hello]?C發送hello消息(協議版本,隨機數c,加密組件列表等)給S,請求建立SSL會話。

S->C:?[server?hello]返回響應(確認加密組件,隨機數s等)。

S->C:?[certificate]返回響應certificate(網站證書)。

S->C:?[server?key?exchange]指定密鑰協商(交換)協議(密鑰協商方式),發送密鑰協商(交換)算法的公鑰給C。

S->C:?[server?hello?done]發送serverhellodone,開始C的密鑰協商。

C->S:?[clientkeyexchange]C生成密鑰協商(交換)算法公私鑰,發送公鑰給S,此時C和S可以協商出相同的密鑰pre?master?secret,現在C和S可以通過c,s,pre?master三個隨機數算出對稱加密的密鑰。(這里本人還看到一個版本是C生成pre?master?secret?后用密鑰交換/協商算法加密發送到S,本人認為不需要發送,S通過C發送的密鑰協商的公鑰和自己生成的一個隨機數xs可以自己計算出這個pre?master?secret。還有一個版本是對稱加密的密鑰是C用S的證書公鑰加密給S用私鑰解密獲得,這里本人認為此對稱密鑰S也可由c,s,pre?master自己生成不需要C發送。)

C->S:?[changecipherspec]通知S此消息以后C以加密方式發送數據。

C->S:?C用生成的對稱密鑰加密之前所有握手消息hash,發送給S解密驗證hash。

S->C:?[changecipherspec]通知C此消息后S以加密方式發送數據。

S->C:?S用對稱密鑰加密之前所有握手消息hash,發送給C進行解密驗證hash。

========================================

開始對稱加密傳輸數據……(Application?Data)

========================================

 

0x03?抓包分析https握手流程

以瀏覽器打開https://www.52pojie.cn為例

1. dns解析和tcp三次握手

【轉】HTTPS淺析與抓包分析

 

2. clienthello:

 

【轉】HTTPS淺析與抓包分析

可以看出瀏覽器發送了支持的協議版本TLS1.2,32字節隨機數c,加密組件cipher等信息給S。

3. serverhello:

【轉】HTTPS淺析與抓包分析

可以看出S選擇了TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384加密組件,解釋如下:
密鑰交換算法,用于決定客戶端與服務器之間在握手的過程中如何認證,用到的算法包括RSA,Diffie-Hellman,ECDH,PSK等,這里選擇了ECDHE。

加密算法,用于加密消息流,該名稱后通常會帶有兩個數字,分別表示密鑰的長度和初始向量的長度,比如DES?56/56,?RC2?56/128,?RC4?128/128,?AES?128/128,?AES?256/256。這里選擇了AES。

報文認證信息碼(MAC)算法,用于創建報文摘要,確保消息的完整性(沒有被篡改),算法包括MD5,SHA等。這里選擇了SHA384。

PRF(偽隨機數函數),用于生成“master?secret”。

S還發送了32字節隨機數s。

 

4.certificate:

【轉】HTTPS淺析與抓包分析

 

第一個cert是52pojie網站的證書,第二個cert是頒發者trustasia機構的證書。

 

【轉】HTTPS淺析與抓包分析

這里可以獲得證書的詳細信息

 

5. serverkeyexchange和serverhellodone:

【轉】HTTPS淺析與抓包分析

 

可以看出使用ECDH密鑰交換算法,指定橢圓曲線secp256r1,還有發送了DH算法協商的公鑰給C。

 

6. Clientkeyexchange和client?change?cipher?spec:

【轉】HTTPS淺析與抓包分析

這里C發送了DH算法協商的公鑰給S,以及加密了握手消息給S進行驗證。

 

7. server?change?cipher?spec:

【轉】HTTPS淺析與抓包分析

服務端使用Ticket方式存儲session狀態,在Server?Change?Cipher?Spec之前就需要發送New?Session?Ticket消息,這部分就不細說了。這里S加密握手消息給C進行驗證。

 

8. application?data:

【轉】HTTPS淺析與抓包分析

這里可以看出雙方握手完畢,以后的消息都進行對稱加密,已經無法看出明文了。

 

0x04?其他

  • 由于握手流程導致https速度比http慢,本人認為其帶來的安全性更為重要,而速度雖然較慢,但是用戶幾乎感覺不到,而且有很多優化措施可以提升速度。
  • 有了https并不能完全保證網站安全,安全是多因素,多環節的,即使有https,某個‘短板’就可以淪陷一個網站,并且https自身也非安全,如著名的心臟出血漏洞。
  • https也非絕對防止MITM,如偽造證書,導出明文密碼等。

 

0x05?結語

簡言之,能用https還是用https吧。由于時間倉促,可能有些細節遺漏或不準確,歡迎指正!

 

0x06?參考資料

https://xianzhi.aliyun.com/forum/read/2037.html

www.droidsec.cn/淺析https中間人攻擊與證書校驗/


https://klionsec.github.io/2017/07/31/https-learn/

kb.cnblogs.com/page/530044/

weinxin
老D博客 微信公眾號
請大佬們關注訂閱老D博客微信公眾號, 掃一掃關注,從此不迷路。 不定時放出邀請碼、福利、推送更新等...

您必須才能發表評論!

評論:14   其中:訪客  12   博主  2
    • avatar zhiming 1

      太復雜了啊!!!

      • avatar nulimvgg 1

        學習了

        • avatar SNNET 0

          HTTPS抓包可比HTTP的抓包復雜。相關的文章網上也比較少。

          • avatar ivancheng458 1

            laod,小弟又漲見識了,期望能從你這里學到越來越多的知識,多謝!!!

            • avatar oooss 0

              我來試試評論~

              • avatar huruiyang 1

                老D,有沒有免費的證書

                • avatar youyi 0

                  注冊好了,評論一下,哈哈哈哈哈

                  • avatar loligogo 1

                    一直以為HTTPS加密是在傳輸層,學習了,簡明易懂!

                    • avatar 2Broear 5

                      現在普及程度怎么樣了

                        • 老D 老D

                          回復 2Broear 根據統計 16%的網站已啟用https,個人小站比較重視,在過兩年,估計可以32左右

                        • avatar jphilmarx 1

                          hosts文件在哪里下載