HTTPS認(rèn)證.md

轉(zhuǎn)載自:https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA 原創(chuàng): 濤哥 6月9日

層級(jí)層名 常用協(xié)議

7應(yīng)用層HTTP/HTTPS、FTP、Socket、Telnet傀蓉、SSH、SMTP砰嘁、POP3恕刘、DHCP桑嘶、DNS屈尼、NFS蛤织、SNMP

6表示層X(jué)DR、LPP

5會(huì)話(huà)層SSL/TLS鸿染、LDAP/DAP、RPC

4傳輸層TCP乞巧、UDP

3網(wǎng)絡(luò)層IP涨椒、OSPF、ICMP、

2數(shù)據(jù)鏈路層以太網(wǎng)蚕冬、令牌環(huán)免猾、PPP、PPTP囤热、L2TP猎提、ARP、ATMP

1物理層物理線(xiàn)路旁蔼、光纖锨苏、無(wú)線(xiàn)電

客戶(hù)端執(zhí)行https請(qǐng)求時(shí),需要由TCP協(xié)議建立和釋放連接棺聊。這就涉及TCP協(xié)議的三次握手和四次揮手伞租。

注意:我們可能會(huì)經(jīng)常看到“HTTP的三次握手”這個(gè)說(shuō)法限佩,其實(shí)這種說(shuō)法不準(zhǔn)確葵诈,HTTP是沒(méi)有什么三次握手的,這個(gè)其實(shí)指的就是TCP的三次握手祟同。

一作喘、TCP的三次握手

TCP通過(guò)三次握手,建立連接

image

第一次:客戶(hù)端發(fā)送一個(gè)唯一的數(shù)據(jù)包(SYNJ)給服務(wù)器晕城,請(qǐng)求建立連接

第二次:服務(wù)器收到客戶(hù)端的請(qǐng)求后泞坦,生成一個(gè)SYN J的回應(yīng)包(ack J+1)和一個(gè)新的數(shù)據(jù)包(SYN K),發(fā)給客戶(hù)端

第三次:客戶(hù)端收到服務(wù)器返回的兩個(gè)包后广辰,針對(duì)服務(wù)器的SYN K包生成一個(gè)回應(yīng)包(ack K+1),并發(fā)送給服務(wù)器暇矫。至此,完成3步握手择吊。這個(gè)過(guò)程李根,類(lèi)似我們?cè)谛盘?hào)不好的時(shí)候打電話(huà)的過(guò)程:

“喂,能聽(tīng)到我說(shuō)話(huà)嗎”

“我能聽(tīng)到几睛,你能聽(tīng)到我嗎”

“能聽(tīng)到”

...

注意房轿,這里“能聽(tīng)到”包含了“聽(tīng)到”“聽(tīng)懂”的兩層意思。想象一下所森,你用中文囱持,對(duì)方給你回了一個(gè)你聽(tīng)不懂的俄文,這個(gè)通話(huà)也就沒(méi)有必要進(jìn)行下去了焕济。

二纷妆、TCP的四次揮手

TCP協(xié)議是一個(gè)全雙工協(xié)議(可以同時(shí)進(jìn)行收發(fā)),通過(guò)四次揮手關(guān)閉連接晴弃。

image

簡(jiǎn)單理解:

第一步:客戶(hù)端發(fā)送FIN(M)報(bào)文給服務(wù)器掩幢,告訴對(duì)方逊拍,“我的數(shù)據(jù)發(fā)完了”。

第二步:服務(wù)器收到FIN(M)報(bào)文后际邻,回給客戶(hù)端一個(gè)ack(M+1)報(bào)文芯丧,告訴客戶(hù)端,“好世曾,我知道了”缨恒。

第三步:服務(wù)器發(fā)一個(gè)FIN(N)報(bào)文給客戶(hù)端,告訴對(duì)方轮听,“我的數(shù)據(jù)也發(fā)完了”骗露。

第四步:客戶(hù)端回應(yīng)ack(N+1),告訴服務(wù)器,“好蕊程,我知道了”椒袍,至此,連接結(jié)束藻茂。

這個(gè)過(guò)程類(lèi)似兩個(gè)人打完電話(huà)的結(jié)束過(guò)程驹暑。

A:我說(shuō)完了

B:哦

B想了一下,也沒(méi)什么要說(shuō)的

B:我也說(shuō)完了

A:好

通話(huà)結(jié)束辨赐,雙方掛電話(huà)

HTTPS的設(shè)計(jì)

  1. 最開(kāi)始狀態(tài)
  • 背景


    最開(kāi)始狀態(tài)
  • 目的: A發(fā)給B的hello消息包优俘,即使被中間人攔截到了,也無(wú)法得知消息的內(nèi)容
  1. 最簡(jiǎn)單的方式: 對(duì)稱(chēng)加密


    對(duì)稱(chēng)加密

    但是掀序,在WWW環(huán)境下帆焕,我們的Web服務(wù)器的通信模型沒(méi)有這么簡(jiǎn)單:


    大家都知道了
使用不同的對(duì)稱(chēng)加密算法

這個(gè)有啥問(wèn)題?
協(xié)商過(guò)程沒(méi)有加密

  1. 非對(duì)稱(chēng)加密
    特點(diǎn):
    私鑰加密后的密文,只要是公鑰不恭,都可以解密叶雹,但是公鑰加密后的密文,只有私鑰可以解密换吧。私鑰只有一個(gè)人有折晦,而公鑰可以發(fā)給所有的人


    公鑰和私鑰

    所以HTTPS的第一層是使用非對(duì)稱(chēng)加密算法進(jìn)行對(duì)稱(chēng)加密算法協(xié)商過(guò)程, 也就是說(shuō)HTTPS同時(shí)需要對(duì)稱(chēng)加密算法和非對(duì)稱(chēng)加密算法

  2. 隨機(jī)數(shù)的誕生
    要達(dá)到Web服務(wù)器針對(duì)每個(gè)客戶(hù)端使用不同的對(duì)稱(chēng)加密算法,同時(shí)沾瓦,我們也不能讓第三者知道這個(gè)對(duì)稱(chēng)加密算法是什么满着,怎么辦?

使用隨機(jī)數(shù)贯莺,就是使用隨機(jī)數(shù)來(lái)生成對(duì)稱(chēng)加密算法风喇。這樣就可以做到服務(wù)器和客戶(hù)端每次交互都是新的加密算法、只有在交互的那一刻才確定加密算法缕探。

  1. 如何得到公鑰
    2個(gè)方案
    方案1: 服務(wù)器端將公鑰發(fā)送給每一個(gè)客戶(hù)端
    方案2: 服務(wù)器端將公鑰放到一個(gè)遠(yuǎn)程服務(wù)器魂莫,客戶(hù)端可以請(qǐng)求得到
    方案1的問(wèn)題

    使用第三方機(jī)構(gòu)的公鑰解決雞生蛋蛋生雞問(wèn)題
    我們不能直接將服務(wù)器的公鑰傳遞給客戶(hù)端,而是第三方機(jī)構(gòu)使用它的私鑰對(duì)我們的公鑰進(jìn)行加密后爹耗,再傳給客戶(hù)端耙考』嗵埽客戶(hù)端再使用第三方機(jī)構(gòu)的公鑰進(jìn)行解密

證書(shū)中只有服務(wù)器交給第三方機(jī)構(gòu)的公鑰,而且這個(gè)公鑰被第三方機(jī)構(gòu)的私鑰加密了, 如果能解密琳骡,就說(shuō)明這個(gè)公鑰沒(méi)有被中間人調(diào)包。因?yàn)槿绻虚g人使用自己的私鑰加密后的東西傳給客戶(hù)端讼溺,客戶(hù)端是無(wú)法使用第三方的公鑰進(jìn)行解密的楣号。


image.png

數(shù)字證書(shū) = 服務(wù)器加密后的公鑰

  1. 漏了一個(gè)場(chǎng)景
    第三方機(jī)構(gòu)不可能只給你一家公司制作證書(shū),它也可能會(huì)給中間人這樣有壞心思的公司發(fā)放證書(shū)怒坯。這樣的炫狱,中間人就有機(jī)會(huì)對(duì)你的證書(shū)進(jìn)行調(diào)包,客戶(hù)端在這種情況下是無(wú)法分辨出是接收的是你的證書(shū)剔猿,還是中間人的视译。因?yàn)椴徽撝虚g人,還是你的證書(shū)归敬,都能使用第三方機(jī)構(gòu)的公鑰進(jìn)行解密酷含。像下面這樣:
    第三方機(jī)構(gòu)向多家公司頒發(fā)證書(shū)的情況:
    image.png

    最終導(dǎo)致其它持有同一家第三方機(jī)構(gòu)證書(shū)的中間人可以進(jìn)行調(diào)包:
    掉包

    數(shù)字簽名

要解決這個(gè)問(wèn)題,我們首先要想清楚一個(gè)問(wèn)題汪茧,辨別同一機(jī)構(gòu)下不同證書(shū)的這個(gè)職責(zé)椅亚,我們應(yīng)該放在哪?

只能放到客戶(hù)端了舱污。意思是呀舔,客戶(hù)端在拿到證書(shū)后,自己就有能力分辨證書(shū)是否被篡改了扩灯。如何才能有這個(gè)能力呢媚赖?

我們從現(xiàn)實(shí)中找靈感。比如你是HR珠插,你手上拿到候選人的學(xué)歷證書(shū)惧磺,證書(shū)上寫(xiě)了持證人,頒發(fā)機(jī)構(gòu)丧失,頒發(fā)時(shí)間等等豺妓,同時(shí)證書(shū)上,還寫(xiě)有一個(gè)最重要的:證書(shū)編號(hào)布讹!我們?cè)趺磋b別這張證書(shū)是的真?zhèn)文亓帐茫恐灰弥@個(gè)證書(shū)編號(hào)上相關(guān)機(jī)構(gòu)去查,如果證書(shū)上的持證人與現(xiàn)實(shí)的這個(gè)候選人一致描验,同時(shí)證書(shū)編號(hào)也能對(duì)應(yīng)上白嘁,那么就說(shuō)明這個(gè)證書(shū)是真實(shí)的。

我們的客戶(hù)端能不能采用這個(gè)機(jī)制呢膘流?像這樣:

image.png

可是絮缅,這個(gè)“第三方機(jī)構(gòu)”到底是在哪呢鲁沥?是一個(gè)遠(yuǎn)端服務(wù)?不可能吧耕魄?如果是個(gè)遠(yuǎn)端服務(wù)画恰,整個(gè)交互都會(huì)慢了。所以吸奴,這個(gè)第三方機(jī)構(gòu)的驗(yàn)證功能只能放在客戶(hù)端的本地了允扇。

客戶(hù)端本地怎么驗(yàn)證證書(shū)呢

客戶(hù)端本地怎么驗(yàn)證證書(shū)呢?答案是證書(shū)本身就已經(jīng)告訴客戶(hù)端怎么驗(yàn)證證書(shū)的真?zhèn)巍?/p>

也就是證書(shū)上寫(xiě)著如何根據(jù)證書(shū)的內(nèi)容生成證書(shū)編號(hào)则奥】既螅客戶(hù)端拿到證書(shū)后根據(jù)證書(shū)上的方法自己生成一個(gè)證書(shū)編號(hào),如果生成的證書(shū)編號(hào)與證書(shū)上的證書(shū)編號(hào)相同读处,那么說(shuō)明這個(gè)證書(shū)是真實(shí)的糊治。

同時(shí),為避免證書(shū)編號(hào)本身又被調(diào)包罚舱,所以使用第三方的私鑰進(jìn)行加密井辜。這地方有些抽象,我們來(lái)個(gè)圖幫助理解:證書(shū)的制作如圖所示馆匿。證書(shū)中的“編號(hào)生成方法MD5”就是告訴客戶(hù)端:你使用MD5對(duì)證書(shū)的內(nèi)容求值就可以得到一個(gè)證書(shū)編號(hào)抑胎。

image.png

當(dāng)客戶(hù)端拿到證書(shū)后,開(kāi)始對(duì)證書(shū)中的內(nèi)容進(jìn)行驗(yàn)證渐北,如果客戶(hù)端計(jì)算出來(lái)的證書(shū)編號(hào)與證書(shū)中的證書(shū)編號(hào)相同阿逃,則驗(yàn)證通過(guò):

image.png

但是第三方機(jī)構(gòu)的公鑰怎么跑到了客戶(hù)端的機(jī)器中呢?世界上這么多機(jī)器赃蛛。

其實(shí)呢恃锉,現(xiàn)實(shí)中,瀏覽器和操作系統(tǒng)都會(huì)維護(hù)一個(gè)權(quán)威的第三方機(jī)構(gòu)列表(包括它們的公鑰)呕臂。因?yàn)榭蛻?hù)端接收到的證書(shū)中會(huì)寫(xiě)有頒發(fā)機(jī)構(gòu)破托,客戶(hù)端就根據(jù)這個(gè)頒發(fā)機(jī)構(gòu)的值在本地找相應(yīng)的公鑰。

說(shuō)到這里歧蒋,想必大家已經(jīng)知道上文所說(shuō)的土砂,證書(shū)就是HTTPS中數(shù)字證書(shū),證書(shū)編號(hào)就是數(shù)字簽名谜洽,而第三方機(jī)構(gòu)就是指數(shù)字證書(shū)簽發(fā)機(jī)構(gòu)(CA)萝映。

CA如何頒發(fā)數(shù)字證書(shū)給服務(wù)器端的

當(dāng)我聽(tīng)到這個(gè)問(wèn)題時(shí),我誤以為阐虚,我們的SERVER需要發(fā)網(wǎng)絡(luò)請(qǐng)求到CA部門(mén)的服務(wù)器來(lái)拿這個(gè)證書(shū)序臂。到底是我理解能力問(wèn)題,還是实束。奥秆。
其實(shí)逊彭,問(wèn)題應(yīng)該是CA如何頒發(fā)給我們的網(wǎng)站管理員,而我們的管理員又如何將這個(gè)數(shù)字證書(shū)放到我們的服務(wù)器上构订。

上面一大堆工作都是為了讓客戶(hù)端與服務(wù)器端安全地協(xié)商出一個(gè)對(duì)稱(chēng)加密算法侮叮。這就是HTTPS中的SSL/TLS協(xié)議主要干的活。剩下的就是通信時(shí)雙方使用這個(gè)對(duì)稱(chēng)加密算法進(jìn)行加密解密悼瘾。

image.png

能不能用一句話(huà)總結(jié)HTTPS签赃?答案是不能,因?yàn)镠TTPS本身實(shí)在太復(fù)雜分尸。但是我還是嘗試使用一段話(huà)來(lái)總結(jié)HTTPS:HTTPS要使客戶(hù)端與服務(wù)器端的通信過(guò)程得到安全保證,必須使用對(duì)稱(chēng)加密算法歹嘹,但是協(xié)商對(duì)稱(chēng)加密算法的過(guò)程箩绍,需要使用非對(duì)稱(chēng)加密算法來(lái)保證安全,然而直接使用非對(duì)稱(chēng)加密的過(guò)程本身也不安全尺上,會(huì)有中間人篡改公鑰的可能性材蛛,所以客戶(hù)端與服務(wù)器不直接使用公鑰,而是使用數(shù)字證書(shū)簽發(fā)機(jī)構(gòu)頒發(fā)的證書(shū)來(lái)保證非對(duì)稱(chēng)加密過(guò)程本身的安全怎抛。這樣通過(guò)這些機(jī)制協(xié)商出一個(gè)對(duì)稱(chēng)加密算法卑吭,就此雙方使用該算法進(jìn)行加密解密。從而解決了客戶(hù)端與服務(wù)器端之間的通信安全問(wèn)題马绝。

單向認(rèn)證
雙向認(rèn)證
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆赏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子富稻,更是在濱河造成了極大的恐慌掷邦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭赋,死亡現(xiàn)場(chǎng)離奇詭異抚岗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)哪怔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)宣蔚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人认境,你說(shuō)我怎么就攤上這事胚委。” “怎么了元暴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵篷扩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茉盏,道長(zhǎng)鉴未,這世上最難降的妖魔是什么枢冤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮铜秆,結(jié)果婚禮上淹真,老公的妹妹穿的比我還像新娘。我一直安慰自己连茧,他們只是感情好核蘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著啸驯,像睡著了一般客扎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罚斗,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天徙鱼,我揣著相機(jī)與錄音,去河邊找鬼针姿。 笑死袱吆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的距淫。 我是一名探鬼主播绞绒,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼榕暇!你這毒婦竟也來(lái)了蓬衡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤彤枢,失蹤者是張志新(化名)和其女友劉穎撤蟆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體堂污,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡家肯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盟猖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讨衣。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖式镐,靈堂內(nèi)的尸體忽然破棺而出反镇,到底是詐尸還是另有隱情,我是刑警寧澤娘汞,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布歹茶,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惊豺。R本人自食惡果不足惜燎孟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尸昧。 院中可真熱鬧揩页,春花似錦、人聲如沸烹俗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幢妄。三九已至兔仰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蕉鸳,已是汗流浹背斋陪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留置吓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓缔赠,卻偏偏與公主長(zhǎng)得像衍锚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗤堰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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