TLS協議分析
一、實驗目的
1.本次實驗主要目的是分析訪問網站時捕捉TLS包,並且對TLS協議進行分析。
2.分析連接建立的完整過程,如:TCP三次握手、SSL安全連接,使用TLS協議連接、協商過程,加密傳送的狀態、TCP揮手等。
3.查看TLS報文的完整字段,並且分析字段的意義。
二、實驗準備
1.系統:win10 軟件:wiresharke
2.了解基本的TLS協議,以及其工作流程
三、實驗原理
1.協議介紹
SSL/TLS是保護計算機網絡通訊安全的一類加密協議,它們在傳輸層上給原先非安全的應用層協議提供加密保護,如非安全的HTTP協議即可被SSL/TLS保護形成安全的HTTPS協議。
SSL (Secure Socket Layer)安全套接字層協議:
SSL通過互相認證、使用數字簽名確保完整性、使用加密確保私密性,以實現客戶端和服務器之間的安全通訊。
分為SSL記錄協議和SSL握手協議。
TLS(Transport Layer Security)傳輸層安全協議:
用於兩個應用程序之間提供保密性和數據完整性。
分為TLS記錄協議和TLS握手協議。 SSL、TLS協議其實是有所差異的,TLS協議是繼承了SSL協議並寫入RFC,標準化後的產物。因此,通常使用SSL來指代SSL協議和TLS協議。
區別:
SSL是Netscape開發的專門用戶保護Web通訊的,目前版本為3.0。
TLS 1.0是IETF(工程任務組)制定的一種新的協議,它建立在SSL 3.0協議規範之上,是SSL 3.0的後續版本。兩者差別極小,可以理解為SSL 3.1,它是寫入了RFC的
2. SSL/TLS在TCP/IP協議棧的位置
SSL/TLS協議在傳輸層上封裝了應用層的數據,因此可以在不需要修改應用層協議的前提下給不安全的應用層協議提供一定的安全保障。
3. SSL/TLS協議棧
4. SSL/TLS協議運作流程
握手原理
(1)為了在握手協議解決降級攻擊的問題,TLS協議規定:client發送ClientHello消息,server必須回復ServerHello消息,否則就是fatal error,當成連接失敗處理。ClientHello和ServerHello消息用於建立client和server之間的安全增強能力,ClientHello和ServerHello消息建立如下屬性:
Protocol Version
Session ID
Cipher Suite
Compression Method
(2)另外,產生並交換兩個random值 ClientHello.random 和 ServerHello.random
(3)密鑰協商使用四條: server的Certificate,ServerKeyExchange,client的Certificate,ClientKeyExchange 。TLS規定以後如果要新增密鑰協商方法,可以訂制這4條消息的數據格式,並且指定這4條消息的使用方法。密鑰協商得出的共享密鑰必須足夠長,當前定義的密鑰協商算法生成的密鑰長度必須大於46字節。
四、實驗步驟
1.選擇https://www.baidu.com/網站,首先通過ping語句獲得百度ip地址61.135.169.125。
2.wireshark捕包,使用ip.src==61.135.169.125&&ssl過濾包。在瀏覽器中訪問https://www.baidu.com/,結果如下圖所示:
其中截取了很多次包,但是都沒有捕捉到ClientHello的包,後來發現不止是這一個包沒有看到而是所有關於Client的包都沒有補到,接著找到一個ServerHello Done的包跟蹤其SSL流,終於觀察到了完整的關於Client的包,如下圖所示:
五、實驗分析
1) 客戶端發送ClientHello
客戶端發起握手協商操作,它將發送一個ClientHello消息給服務器,消息中明確了其所支持的SSL/TLS版本、Cipher suite加密算法組合等,可以讓服務器選擇,並提供了一個客戶端隨機數,用於以後生成會話密鑰使用。
2) 服務器返回ServerHello
服務器將返回一個ServerHello消息,該消息包含了服務器選擇的協議版本、加密算法,以及服務器隨機數、會話ID等內容。其中,服務器選擇的協議版本應小於等於客戶端ClientHello中的協議版本。
本次實驗中服務器確認使用TLS 1.2版本的協議,並選擇TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256加密算法組合。
3) 服務器發送Certificate
服務器發送ServerHello消息,選擇好協議版本和加密算法組合後,將發送Certificate消息,該消息包含了服務器的證書等信息,可通過證書鏈認證該證書的真實性。根據選擇的加密算法組合的不同,服務器證書中的公鑰也可被用於加密後面握手過程中生成的Premaster secret。
4) 服務器發送ServerKeyExchange
服務器發送ServerKeyExchange消息,消息中包含了服務器這邊的EC Diffie-Hellman算法相關參數。此消息一般只在選擇使用DHE 和DH_anon等加密算法組合時才會由服務器發出。
5) 服務器發送ServerHelloDone
服務器發送ServerHelloDone消息,告知客戶端服務器這邊握手相關的消息發送完畢。
6) 客戶端發送ClientKeyExchange
7) 客戶端發送ChangeCipherSpec
8) 客戶端發送Finished
客戶端發送ClientKeyExchange消息,消息中包含客戶端這邊的EC Diffie-Hellman算法相關參數,然後服務器和客戶端都可根據接收到的對方參數和自身參數運算出Premaster secret,為生成會話密鑰做準備。客戶端向服務器發送ChangeCipherSpec消息,通知服務器此消息以後客戶端會以加密方式發送數據。客戶端使用之前握手過程中獲得的服務器隨機數、客戶端隨機數、Premaster secret計算生成會話密鑰,然後使用該會話密鑰加密之前所有收發握手消息的Hash和MAC值,發送給服務器,服務器將相同的會話密鑰(使用相同方法生成)解密此消息,校驗其中的Hash和MAC值。
9) 服務器發送ChangeCipherSpec
服務器發送ChangeCipherSpec消息,通知客戶端此消息以後服務器會以加密方式發送數據。
10) 服務器發送Finished
服務器使用會話密鑰加密(生成方式與客戶端相同,使用握手過程中獲得的服務器隨機數、客戶端隨機數、Premaster secret計算生成)之前所有收發握手消息的Hash和MAC值,發送給客戶端去校驗。
若客戶端服務器都校驗成功,握手階段完成,雙方將按照SSL記錄協議的規範使用協商生成的會話密鑰加密發送數據。
TLS協議分析