1. 協(xié)議介紹
SSL/TLS是保護(hù)計(jì)算機(jī)網(wǎng)絡(luò)通訊安全的一類加密協(xié)議,它們?cè)趥鬏攲由辖o原先非安全的應(yīng)用層協(xié)議提供加密保護(hù),如非安全的HTTP協(xié)議即可被SSL/TLS保護(hù)形成安全的HTTPS協(xié)議。
SSL、TLS協(xié)議其實(shí)是有所差異的,TLS協(xié)議是繼承了SSL協(xié)議并寫入RFC,標(biāo)準(zhǔn)化后的產(chǎn)物。因此,通常使用SSL來指代SSL協(xié)議和TLS協(xié)議。
SSL (Secure Socket Layer)安全套接字層協(xié)議
SSL通過互相認(rèn)證、使用數(shù)字簽名確保完整性、使用加密確保私密性,以實(shí)現(xiàn)客戶端和服務(wù)器之間的安全通訊。
分為SSL記錄協(xié)議和SSL握手協(xié)議。
TLS(Transport Layer Security)傳輸層安全協(xié)議
用于兩個(gè)應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。
分為TLS記錄協(xié)議和TLS握手協(xié)議。
區(qū)別:
SSL是Netscape開發(fā)的專門用戶保護(hù)Web通訊的,目前版本為3.0。
TLS 1.0是IETF(工程任務(wù)組)制定的一種新的協(xié)議,它建立在SSL 3.0協(xié)議規(guī)范之上,是SSL 3.0的后續(xù)版本。兩者差別極小,可以理解為SSL 3.1,它是寫入了RFC的
2. SSL/TLS在TCP/IP協(xié)議棧的位置
SSL/TLS協(xié)議在傳輸層上封裝了應(yīng)用層的數(shù)據(jù),因此可以在不需要修改應(yīng)用層協(xié)議的前提下給不安全的應(yīng)用層協(xié)議提供一定的安全保障。
3. SSL/TLS協(xié)議棧
4. SSL/TLS協(xié)議運(yùn)作流程
5. SSL/TLS握手階段抓包解析
本次實(shí)驗(yàn)使用瀏覽器訪問https://www.baidu.com,使用WireShark抓包獲取其中的SSL/TLS握手階段的數(shù)據(jù)包并簡要分析。
1) 客戶端發(fā)送ClientHello
客戶端發(fā)起握手協(xié)商操作,它將發(fā)送一個(gè)ClientHello消息給服務(wù)器,消息中明確了其所支持的SSL/TLS版本、Cipher suite加密算法組合等,可以讓服務(wù)器選擇,并提供了一個(gè)客戶端隨機(jī)數(shù),用于以后生成會(huì)話密鑰使用。
2) 服務(wù)器返回ServerHello
服務(wù)器將返回一個(gè)ServerHello消息,該消息包含了服務(wù)器選擇的協(xié)議版本、加密算法,以及服務(wù)器隨機(jī)數(shù)、會(huì)話ID等內(nèi)容。其中,服務(wù)器選擇的協(xié)議版本應(yīng)小于等于客戶端ClientHello中的協(xié)議版本。
本次實(shí)驗(yàn)中服務(wù)器確認(rèn)使用TLS 1.2版本的協(xié)議,并選擇TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256加密算法組合。
3) 服務(wù)器發(fā)送Certificate
服務(wù)器發(fā)送ServerHello消息,選擇好協(xié)議版本和加密算法組合后,將發(fā)送Certificate消息,該消息包含了服務(wù)器的證書等信息,可通過證書鏈認(rèn)證該證書的真實(shí)性。根據(jù)選擇的加密算法組合的不同,服務(wù)器證書中的公鑰也可被用于加密后面握手過程中生成的Premaster secret。
4) 服務(wù)器發(fā)送ServerKeyExchange
服務(wù)器發(fā)送ServerKeyExchange消息,消息中包含了服務(wù)器這邊的EC Diffie-Hellman算法相關(guān)參數(shù)。此消息一般只在選擇使用DHE 和DH_anon等加密算法組合時(shí)才會(huì)由服務(wù)器發(fā)出。
5) 服務(wù)器發(fā)送ServerHelloDone
服務(wù)器發(fā)送ServerHelloDone消息,告知客戶端服務(wù)器這邊握手相關(guān)的消息發(fā)送完畢。
6) 客戶端發(fā)送ClientKeyExchange
客戶端發(fā)送ClientKeyExchange消息,消息中包含客戶端這邊的EC Diffie-Hellman算法相關(guān)參數(shù),然后服務(wù)器和客戶端都可根據(jù)接收到的對(duì)方參數(shù)和自身參數(shù)運(yùn)算出Premaster secret,為生成會(huì)話密鑰做準(zhǔn)備。
7) 客戶端發(fā)送ChangeCipherSpec
客戶端向服務(wù)器發(fā)送ChangeCipherSpec消息,通知服務(wù)器此消息以后客戶端會(huì)以加密方式發(fā)送數(shù)據(jù)。
8) 客戶端發(fā)送Finished
客戶端使用之前握手過程中獲得的服務(wù)器隨機(jī)數(shù)、客戶端隨機(jī)數(shù)、Premaster secret計(jì)算生成會(huì)話密鑰,然后使用該會(huì)話密鑰加密之前所有收發(fā)握手消息的Hash和MAC值,發(fā)送給服務(wù)器,服務(wù)器將相同的會(huì)話密鑰(使用相同方法生成)解密此消息,校驗(yàn)其中的Hash和MAC值。
9) 服務(wù)器發(fā)送ChangeCipherSpec
服務(wù)器發(fā)送ChangeCipherSpec消息,通知客戶端此消息以后服務(wù)器會(huì)以加密方式發(fā)送數(shù)據(jù)。
10) 服務(wù)器發(fā)送Finished
服務(wù)器使用會(huì)話密鑰加密(生成方式與客戶端相同,使用握手過程中獲得的服務(wù)器隨機(jī)數(shù)、客戶端隨機(jī)數(shù)、Premaster secret計(jì)算生成)之前所有收發(fā)握手消息的Hash和MAC值,發(fā)送給客戶端去校驗(yàn)。
若客戶端服務(wù)器都校驗(yàn)成功,握手階段完成,雙方將按照SSL記錄協(xié)議的規(guī)范使用協(xié)商生成的會(huì)話密鑰加密發(fā)送數(shù)據(jù)。
6. 參考資料
https://en.wikipedia.org/wiki/Transport_Layer_Security
http://www.cnblogs.com/happyhippy/archive/2007/05/14/746476.html
http://blog.csdn.net/fw0124/article/details/40983787
*本文原創(chuàng)作者:ArkTeam/Snowman,轉(zhuǎn)載須注明來自FreeBuf.COM