解密 HTTPS 握手過(guò)程

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的 HTTP 通道,簡(jiǎn)單講是 HTTP 的安全版。HTTPS 就是將 HTTP 協(xié)議數(shù)據(jù)包放到 SSL/TSL 層加密后,在 TCP/IP 層組成 IP 數(shù)據(jù)報(bào)去傳輸,以此保證傳輸數(shù)據(jù)的安全。SSL/TLS 處于 TCP 協(xié)議之上,HTTP(或者其它 TCP 協(xié)議,如 SMTP、IMAP) 協(xié)議之下,在 《HTTPS 權(quán)威指南》一書(shū)中將它歸為表示層。

OSI.png

網(wǎng)景(NetScape)公司在 1994 年開(kāi)發(fā)了 SSL 協(xié)議(Secure Sockets Layer) 1.0 版,但是直到 1996 年 SSL3.0 版本問(wèn)世,才得到大規(guī)模應(yīng)用。TLS(Transport Layer Security) 是 SSL 的升級(jí)版,目前主流瀏覽器都已經(jīng)實(shí)現(xiàn)了 TLS1.2 的支持。

2. TLS 握手

SSL/TLS 協(xié)議的基本思路是:

  1. 客戶端向服務(wù)器索要并驗(yàn)證公鑰
  2. 雙方協(xié)商生成“對(duì)話秘鑰”
  3. 雙方采用“對(duì)話秘鑰”進(jìn)行加密通信

生成“對(duì)話秘鑰”的過(guò)程就是“握手”,握手是TLS協(xié)議中最精密復(fù)雜的部分。在這個(gè)過(guò)程中,通信雙方協(xié)商連接參數(shù),并且完成身份驗(yàn)證。一次完整的握手通常包含如下流程:


shakehand.png

下面結(jié)合 WireShark 抓包分析上圖中每一步傳遞的信息。WireShark 的使用方法在此不做介紹,如果不了解,可以通過(guò) 一站式學(xué)習(xí) Wireshark學(xué)習(xí)它的基本用法。抓包步驟:

  1. 打開(kāi) Wireshark
  2. 在瀏覽器中打開(kāi) 百度,拿到 ip 地址,我是通過(guò) chrome 的一個(gè)插件取得 ip 地址的。
  3. 在 Wireshark 中過(guò)濾出百度的數(shù)據(jù)包。

2.1 Client Hello

ClientHello.png

這條消息將客戶端的功能和首選項(xiàng)傳送給服務(wù)器。

  1. version: 協(xié)議版本。
  2. Random: 隨機(jī)數(shù),在握手時(shí),客戶端和服務(wù)器都會(huì)提供隨機(jī)數(shù)。這種隨機(jī)性對(duì)每次握手都是獨(dú)一無(wú)二的,在 身份驗(yàn)證中起著舉足輕重的作用。它可以防止重放攻擊,并確認(rèn)初始數(shù)據(jù)交換的完整性。
  3. Session: 第一次連接時(shí),session ID 是空的,表示客戶端不希望恢復(fù)某個(gè)已存在的會(huì)話,在后面的連接中,服務(wù)器可以借助會(huì)話 ID 在自己的緩存在找到對(duì)應(yīng)的會(huì)話狀態(tài)。
  4. Cipher Suites: 密碼套件,此列表中包含了客戶端支持所有密碼套件,我的瀏覽器支持 14 個(gè)。
  5. Compression Methods: 壓縮方法
  6. Extensions: 擴(kuò)展會(huì)攜帶額外數(shù)據(jù)

2.2 Sever Hello

SeverHello.png

Server Hello消息的意義是將服務(wù)器選擇的連接參數(shù)傳送回客戶端。消息的結(jié)構(gòu)與 Client Hello 相似,只是每個(gè)字段只包含一個(gè)選項(xiàng)。

2.3 Certificate

Certificate.png

Certificate 消息用于攜帶服務(wù)器 X.509 證書(shū)鏈,圖中有兩個(gè)證書(shū),第一個(gè)是域名為:baidu.com 的證書(shū),第二個(gè)是 CA 證書(shū),用于驗(yàn)證第一個(gè)證書(shū)的正確性。那如何驗(yàn)證第二個(gè) CA 證書(shū)是否被篡改過(guò)呢?那就要使用瀏覽器內(nèi)置的根證書(shū)去驗(yàn)證它了。

2.4 Server Key Exchange

ServerKeyExchange.png

ServerKeyExchange消息的目的是攜帶密鑰交換的額外數(shù)據(jù)。消息內(nèi)容對(duì)于不同的協(xié)商算法套件都會(huì)存在差異。這里傳回了 Diffie-Hellman 密鑰交換算法的參數(shù),如果是使用 RSA 加密算,這一步服務(wù)器會(huì)傳一個(gè)隨機(jī)數(shù)給客戶端。

2.5 Server Hello Done

ServerHelloDone消息表明服務(wù)器已經(jīng)將所有預(yù)計(jì)的握手消息發(fā)送完畢。在此之后,服務(wù)器會(huì) 等待客戶端發(fā)送消息。

2.6 Client Key Exchange

ClientKeyExchange.png

ClientKeyExchange消息攜帶客戶端為密鑰交換提供的所有信息。這里向服務(wù)器傳送了 Diffie-Hellman 算法的另一個(gè)參數(shù)。如果使用了 RSA 加密算法,客戶端會(huì)使用服務(wù)器的公鑰加密一個(gè)隨機(jī)數(shù)傳給服務(wù)器,服務(wù)器收到后使用私鑰解密。

2.7 Change Cipher Spec

ChangeCipherSpec 消息表明發(fā)送端已取得用以生成連接參數(shù)的足夠信息,已經(jīng)生成加密秘鑰,并且將切換到加密模式。客戶端和服務(wù)器在條件成熟時(shí)都會(huì)發(fā)送這個(gè)消息。這條消息有時(shí)會(huì)與 Client Key Exchange 消息一起發(fā)出,如上圖所示。

2.8 Finished

Finished 消息意味著握手已經(jīng)完成。消息內(nèi)容將加密,以便雙方可以安全地交換驗(yàn)證整個(gè)握 手完整性所需的數(shù)據(jù)。


ApplicationData.png

3. 數(shù)字證書(shū)

解決什么問(wèn)題?
客戶端與服務(wù)器握手過(guò)程中,服務(wù)器向客戶端傳遞公鑰,客戶端如何判斷這個(gè)公鑰是可信賴的,不是別人偽造的呢?就是通過(guò)數(shù)字證書(shū)。

數(shù)字證書(shū)是一個(gè)包含公鑰、訂閱人相關(guān)信息以及證書(shū)頒發(fā)者數(shù)字簽名的數(shù)字文件,也就是一個(gè)讓我們可以交換、存儲(chǔ)和使用公鑰的殼。

GoDaddyCertificate.png

數(shù)字證書(shū)通常包含如下結(jié)構(gòu):

  1. 版本: 有 0、1、2 三個(gè)編號(hào),分別表示版本 1、2、3,現(xiàn)在大部分證書(shū)都采用版本 3 的格式。
  2. 序列號(hào):每個(gè) CA 用來(lái)唯一標(biāo)識(shí)其所簽發(fā)的證書(shū)
  3. 簽名算法:這個(gè)字段指明證書(shū)簽名所用的算法,需要放到證書(shū)里面,這樣才能被證書(shū)簽名保護(hù)。
  4. 有效期:證書(shū)的有效期包括開(kāi)始日期和結(jié)束日期,在這段時(shí)間內(nèi)證書(shū)是有效的。
  5. 公鑰:包括公鑰的加密算法、公鑰本身、公鑰的簽名。

光有證書(shū)還不夠,證書(shū)無(wú)法證明自己是可信賴的。好比你要證明自己是個(gè)好人,自己說(shuō)自己是好人是沒(méi)用的,需要到派出所開(kāi)一個(gè) “無(wú)犯罪記錄” 的證明,因?yàn)榕沙鏊菣?quán)威機(jī)構(gòu),它可以證明你是好人。服務(wù)器需要提供證書(shū)鏈,證書(shū)鏈中包含中間 CA 證書(shū),中間 CA 證書(shū)可以驗(yàn)證服務(wù)器證書(shū)的有效性。那誰(shuí)來(lái)證明 CA 證書(shū)的有效性呢?瀏覽器中已經(jīng)內(nèi)置了一些根 CA 證書(shū),中間 CA 證書(shū)由根 CA 證書(shū)簽發(fā),根 CA 證書(shū)可以驗(yàn)證 中間 CA 證書(shū)的有效性。

2.3 節(jié)圖中百度服務(wù)器發(fā)來(lái)的證書(shū)鏈中包含了一個(gè)域名為 baidu.com 的實(shí)體證書(shū)以及簽發(fā)改實(shí)體證書(shū)的中間 CA 證書(shū)。

參考文章:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評(píng)論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,520評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,362評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,805評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,541評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,896評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,062評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,608評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,356評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,555評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,769評(píng)論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,175評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,489評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,289評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,516評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容