https 原理簡析

起因:週四下午要在公司做關於https的分享,就順便結合已經寫好的PPT,在CSDN 中也分享下。

參考資料:

上面的參考資料都挺好的,尤其後面4個,如果想徹底瞭解https必須得讀一下

HTTPS是什麼?

HTTPS (also called HTTP over TLS, HTTP over SSL and HTTP Secure) is a protocol for secure communication over a computer network which is widely used on the Internet. HTTPS consists of communication over Hypertext Transfer Protocol (HTTP) within a connection encrypted by Transport Layer Security or its predecessor, Secure Sockets Layer.

它解決了什麼問題?

  • 內容加密 防止中間人攻擊(man-in-the-middle attacks)
  • 身份認證 防止DNS 劫持
  • 數據完整性檢查 防止內容被第三方冒充或者篡改

其實我們經常會聽到某個消息,就是某些地方性的網絡運營商惡意劫持門戶網站,在網站上加入未經授權的廣告。還有DNS劫持後,網站被指向釣魚網站。
https 就是爲了防範這些攻擊

這裏寫圖片描述

HTTPS 可以被簡單的理解爲HTTP + TLS
如果OSI網絡模型來理解
HTTP 協議工作在7層應用層, TLS協議工作在5層會話層,6層表示層

In OSI model equivalences, TLS/SSL is initialized at layer 5 (session layer) and works at layer 6 (the presentation layer).The session layer has a handshake using an asymmetric cipher in order to establish cipher settings and a shared key for that session; then the presentation layer encrypts the rest of the communication using a symmetric cipher and that session key. In both models, TLS and SSL work on behalf of the underlying transport layer, whose segments carry encrypted data

我們知道在網絡分層協議中,出於底層的協議會對上一層協議傳來的數據包進行封裝(增加頭信息,校驗碼等等)
因此當使用https 協議時,所有的http數據包都是被加密傳輸的(承載在TLS數據包中),無法被直接抓取。

TLS 分爲2個主要的子協議
1. 記錄協議
2. 握手協議

1. 記錄協議 The TLS Record Protocol:
讓我們再來回顧一下,首先記錄協議工作在表示層,
發送端
fragment -> compresses -> mac -> encrypt
數據在發送端被分段,壓縮,生成校驗碼,加密
接收端
decrypt-> verified -> decompress -> reassemble
在接收端,解密,驗證校驗碼,解壓,重新裝配

可見在這個協議中,至少出現了3種算法
1. 壓縮算法
2. 校驗碼生成算法
3. 加密算法
通訊雙方必須事先確定他們共同使用的這三種算法

2. 握手協議 The TLS shakehand Protocol:
記錄協議所需確認的算法都是在握手協議中完成的
並且在HTTP在實際傳輸應用層數據時使用的對稱加密算法進行加密(表示層),只有在握手階段纔會用到非對稱加密算法

握手協議的執行過程:
這裏寫圖片描述

關於圖中的各個階段,各類型包的說明,RFC5246中已有詳細說明不再贅述,需要強調的是
Certificate server 端向client端提供證書
ServerKeyExchange server 將公鑰提供給client端
ClientKeyExchange client 會將 premaster key 用公鑰加密後發送給server端

大家可以看到,由於premaster key是由client端生成的,所以該key的值只有client 和server(有私鑰可以解出)能夠知道,
即使它們中間存在中間人,也無法獲知這個key。premaster key 最終會被用於生成對稱加密算法所需的key

另外從 Finished 包開始數據包就已經開始加密傳輸了,所以在抓包時,無法直接分辨出這個包

使用curl -v https://www.baidu.com/
注: ubuntu 下纔可以獲得詳細的握手過程
可以獲得詳細的通訊記錄
這裏寫圖片描述

可以看出因爲多個一個握手環節,https 比http的包至少多出8個包

另外像 ECDHE-RSA-WITH-AES-128-GCM-SHA256
是密碼套件的類型碼,我們在介紹記錄協議時講過,它需要至少用到三種算法
1. 壓縮算法
2. 校驗碼生成算法
3. 加密算法
client 和 server 端是一次性確定這三種算法的具體類型的
對於 ECDHE-RSA-AES-128-GCM-SHA256 它表示
握手階段的非對稱加密算法使用ECDHE
數字證書的算法使用RSA
實際數據通訊的對稱加密算法使用 AES--GCM mode
校驗碼生成算法使用 SHA256

PS:
std.pcapng 是用wireshark 的抓包結果文件,請使用wireshark 打開
使用時可以使用下面的filter語句過濾出TLS 相關協議包
tcp.port eq 443 and ip.addr == 180.149.132.47

std.pcapng 下載地址:
http://download.csdn.net/detail/woshiaotian/8947611

發佈了91 篇原創文章 · 獲贊 20 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章