HTTPS詳解二:SSL / TLS 工作原理和詳細(xì)握手過(guò)程

在上篇文章HTTPS詳解一中校套,我已經(jīng)為大家介紹了 HTTPS 的詳細(xì)原理和通信流程集灌,但總感覺(jué)少了點(diǎn)什么推汽,應(yīng)該是少了對(duì)安全層的針對(duì)性介紹绽乔,那么這篇文章就算是對(duì)HTTPS 詳解一的補(bǔ)充吧弧蝇。還記得這張圖吧。

HTTP和HTTPS的區(qū)別

顯然折砸,HTTPS 相比 HTTP最大的不同就是多了一層 SSL (Secure Sockets Layer 安全套接層)或 TLS (Transport Layer Security 安全傳輸層協(xié)議)看疗。有了這個(gè)安全層,就確保了互聯(lián)網(wǎng)上通信雙方的通信安全睦授,那么這個(gè)安全層是怎么工作的两芳,SSL / TLS 握手過(guò)程又是怎樣的呢?本文將對(duì)這些問(wèn)題一一解答去枷。

1怖辆、SSL / TLS 以及 SSL / TLS 握手的概念

SSL 和 TLS 協(xié)議可以為通信雙方提供識(shí)別和認(rèn)證通道,從而保證通信的機(jī)密性和數(shù)據(jù)完整性删顶。TLS 協(xié)議是從Netscape SSL 3.0協(xié)議演變而來(lái)的竖螃,不過(guò)這兩種協(xié)議并不兼容,SSL 已經(jīng)被 TLS 取代逗余,所以下文就以 TLS 指代安全層特咆。 TLS 握手是啟動(dòng) HTTPS 通信的過(guò)程,類似于 TCP 建立連接時(shí)的三次握手录粱。 在 TLS 握手的過(guò)程中腻格,通信雙方交換消息以相互驗(yàn)證,相互確認(rèn)啥繁,并確立它們所要使用的加密算法以及會(huì)話密鑰 (用于對(duì)稱加密的密鑰)∑烀觯可以說(shuō)酬核,TLS 握手是 HTTPS 通信的基礎(chǔ)部分。

2宪睹、TLS 握手過(guò)程中發(fā)生了什么

我們已經(jīng)知道 TLS 握手的目的是建立安全連接愁茁,那么通信雙方在這個(gè)過(guò)程中究竟干了什么呢?下面就是答案:

  • 商定雙方通信所使用的的 TLS 版本 (例如 TLS1.0, 1.2, 1.3等等)亭病;
  • 確定雙方所要使用的密碼組合鹅很;
  • 客戶端通過(guò)服務(wù)器的公鑰和數(shù)字證書 (上篇文章已有介紹)上的數(shù)字簽名驗(yàn)證服務(wù)端的身份;
  • 生成會(huì)話密鑰罪帖,該密鑰將用于握手結(jié)束后的對(duì)稱加密促煮。

3邮屁、TLS 握手詳細(xì)過(guò)程

下面來(lái)看 TLS 握手的詳細(xì)過(guò)程:

SSL : TLS 握手過(guò)程
  1. "client hello"消息:客戶端通過(guò)發(fā)送"client hello"消息向服務(wù)器發(fā)起握手請(qǐng)求,該消息包含了客戶端所支持的 TLS 版本和密碼組合以供服務(wù)器進(jìn)行選擇菠齿,還有一個(gè)"client random"隨機(jī)字符串佑吝。
  2. "server hello"消息:服務(wù)器發(fā)送"server hello"消息對(duì)客戶端進(jìn)行回應(yīng),該消息包含了數(shù)字證書绳匀,服務(wù)器選擇的密碼組合和"server random"隨機(jī)字符串芋忿。
  3. 驗(yàn)證:客戶端對(duì)服務(wù)器發(fā)來(lái)的證書進(jìn)行驗(yàn)證,確保對(duì)方的合法身份疾棵,驗(yàn)證過(guò)程可以細(xì)化為以下幾個(gè)步驟:
    1. 檢查數(shù)字簽名
    2. 驗(yàn)證證書鏈 (這個(gè)概念下面會(huì)進(jìn)行說(shuō)明)
    3. 檢查證書的有效期
    4. 檢查證書的撤回狀態(tài) (撤回代表證書已失效)
  4. "premaster secret"字符串:客戶端向服務(wù)器發(fā)送另一個(gè)隨機(jī)字符串"premaster secret (預(yù)主密鑰)"戈钢,這個(gè)字符串是經(jīng)過(guò)服務(wù)器的公鑰加密過(guò)的,只有對(duì)應(yīng)的私鑰才能解密是尔。
  5. 使用私鑰:服務(wù)器使用私鑰解密"premaster secret"殉了。
  6. 生成共享密鑰:客戶端和服務(wù)器均使用 client random,server random 和 premaster secret拟枚,并通過(guò)相同的算法生成相同的共享密鑰 KEY薪铜。
  7. 客戶端就緒:客戶端發(fā)送經(jīng)過(guò)共享密鑰 KEY加密過(guò)的"finished"信號(hào)。
  8. 服務(wù)器就緒:服務(wù)器發(fā)送經(jīng)過(guò)共享密鑰 KEY加密過(guò)的"finished"信號(hào)恩溅。
  9. 達(dá)成安全通信:握手完成隔箍,雙方使用對(duì)稱加密進(jìn)行安全通信。

4暴匠、TLS 握手過(guò)程中的一些重要概念

  1. 數(shù)字證書 (digital certificate):在非對(duì)稱加密通信過(guò)程中鞍恢,服務(wù)器需要將公鑰發(fā)送給客戶端傻粘,在這一過(guò)程中每窖,公鑰很可能會(huì)被第三方攔截并替換,然后這個(gè)第三方就可以冒充服務(wù)器與客戶端進(jìn)行通信弦悉,這就是傳說(shuō)中的“中間人攻擊”(man in the middle attack)窒典。解決此問(wèn)題的方法是通過(guò)受信任的第三方交換公鑰,具體做法就是服務(wù)器不直接向客戶端發(fā)送公鑰稽莉,而是要求受信任的第三方瀑志,也就是證書認(rèn)證機(jī)構(gòu) (Certificate Authority, 簡(jiǎn)稱 CA)將公鑰合并到數(shù)字證書中,然后服務(wù)器會(huì)把公鑰連同證書一起發(fā)送給客戶端污秆,私鑰則由服務(wù)器自己保存以確保安全劈猪。數(shù)字證書一般包含以下內(nèi)容:

    1. 證書所有者的公鑰

    2. 證書所有者的專有名稱

    3. 證書頒發(fā)機(jī)構(gòu)的專有名稱

    4. 證書的有效起始日期

    5. 證書的過(guò)期日期

    6. 證書數(shù)據(jù)格式的版本號(hào)

    7. 序列號(hào),這是證書頒發(fā)機(jī)構(gòu)為該證書分配的唯一標(biāo)識(shí)符

      ... ...

  1. 數(shù)字簽名 (digital signature):這個(gè)概念很好理解良拼,其實(shí)跟人的手寫簽名類似战得,是為了確保數(shù)據(jù)發(fā)送者的合法身份,也可以確保數(shù)據(jù)內(nèi)容未遭到篡改庸推,保證數(shù)據(jù)完整性常侦。與手寫簽名不同的是浇冰,數(shù)字簽名會(huì)隨著文本數(shù)據(jù)的變化而變化。具體到數(shù)字證書的應(yīng)用場(chǎng)景聋亡,數(shù)字簽名的生成和驗(yàn)證流程如下:

    1. 服務(wù)器對(duì)證書內(nèi)容進(jìn)行信息摘要計(jì)算 (常用算法有 SHA-256等)肘习,得到摘要信息,再用私鑰把摘要信息加密坡倔,就得到了數(shù)字簽名
    2. 服務(wù)器把數(shù)字證書連同數(shù)字簽名一起發(fā)送給客戶端
    3. 客戶端用公鑰解密數(shù)字簽名漂佩,得到摘要信息
    4. 客戶端用相同的信息摘要算法重新計(jì)算證書摘要信息,然后對(duì)這兩個(gè)摘要信息進(jìn)行比對(duì)罪塔,如果相同仅仆,則說(shuō)明證書未被篡改,否則證書驗(yàn)證失敗
  2. 證書鏈 (certificate chain):證書鏈垢袱,也稱為證書路徑墓拜,是用于認(rèn)證實(shí)體合法身份的證書列表,具體到 HTTPS 通信中请契,就是為了驗(yàn)證服務(wù)器的合法身份咳榜。之所以使用證書鏈,是為了保證根證書 (root CA certificate)的安全爽锥,中間層可以看做根證書的代理涌韩,起到了緩沖的作用,如下圖所示氯夷,這里還以 B 站證書為例:

證書鏈

證書鏈從根證書開(kāi)始臣樱,并且證書鏈中的每一級(jí)證書所標(biāo)識(shí)的實(shí)體都要為其下一級(jí)證書簽名,而根證書自身則由證書頒發(fā)機(jī)構(gòu)簽名腮考」秃粒客戶端在驗(yàn)證證書鏈時(shí),必須對(duì)鏈中所有證書的數(shù)字簽名進(jìn)行驗(yàn)證踩蔚,直到達(dá)到根證書為止棚放。

  1. 密碼規(guī)范和密碼組合 (CipherSpecs 和 CipherSuites):通信雙方在安全連接中所使用的算法必須符合密碼安全協(xié)議的規(guī)定,CipherSpecs 和 CipherSuites 正好定義了合法的密碼算法組合馅闽。CipherSpecs 用于認(rèn)證加密算法和信息摘要算法的組合飘蚯,通信雙方必須同意這個(gè)密碼規(guī)范才能進(jìn)行通信。而 CipherSuites 則定義了 SSL / TLS 安全連接中所使用的加密算法的組合福也,該組合包含三種不同的算法:
    1. 握手期間所使用的的密鑰交換和認(rèn)證算法 (最常用的是 RSA 算法)
    2. 加密算法 (用于握手完成后的對(duì)稱加密局骤,常用的有 AES、3DES等)
    3. 信息摘要算法 (常用的有 SHA-256暴凑、SHA-1 和 MD5 等)

4峦甩、總結(jié)

本文對(duì) SSL / TLS 握手過(guò)程進(jìn)行了詳細(xì)的解析,也對(duì)握手過(guò)程中的幾個(gè)重要概念進(jìn)行了補(bǔ)充說(shuō)明搬设。想繼續(xù)深入了解的小伙伴可以去參考一下 CloudFlareIBM 的官網(wǎng)穴店,這兩個(gè)網(wǎng)站也是本文內(nèi)容的主要來(lái)源撕捍。多逛逛英文網(wǎng)站,不僅可以漲姿勢(shì)泣洞,獲取權(quán)威信息忧风,還能順帶提升一波英語(yǔ)水平,一舉兩得球凰,豈不美哉狮腿,希望小伙伴們也能盡快養(yǎng)成這樣的好習(xí)慣。HTTPS 詳解部分到此結(jié)束呕诉,咱們下篇文章再見(jiàn)缘厢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甩挫,隨后出現(xiàn)的幾起案子贴硫,更是在濱河造成了極大的恐慌,老刑警劉巖伊者,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件英遭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡亦渗,警方通過(guò)查閱死者的電腦和手機(jī)挖诸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)法精,“玉大人多律,你說(shuō)我怎么就攤上這事÷眩” “怎么了狼荞?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)洛勉。 經(jīng)常有香客問(wèn)我粘秆,道長(zhǎng),這世上最難降的妖魔是什么收毫? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮殷勘,結(jié)果婚禮上此再,老公的妹妹穿的比我還像新娘。我一直安慰自己玲销,他們只是感情好输拇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贤斜,像睡著了一般策吠。 火紅的嫁衣襯著肌膚如雪逛裤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天猴抹,我揣著相機(jī)與錄音带族,去河邊找鬼。 笑死蟀给,一個(gè)胖子當(dāng)著我的面吹牛蝙砌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跋理,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼择克,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了前普?” 一聲冷哼從身側(cè)響起肚邢,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拭卿,沒(méi)想到半個(gè)月后道偷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡记劈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年勺鸦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片目木。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡换途,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刽射,到底是詐尸還是另有隱情军拟,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布誓禁,位于F島的核電站懈息,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏摹恰。R本人自食惡果不足惜辫继,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俗慈。 院中可真熱鬧姑宽,春花似錦、人聲如沸闺阱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瘦穆,卻和暖如春纪隙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扛或。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工绵咱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人告喊。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓麸拄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親黔姜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拢切,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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