網(wǎng)絡(luò) HTTPS機(jī)制

1脏答、概述

互聯(lián)網(wǎng)上進(jìn)行的任何活動(dòng)(閱讀本文尖淘,朋友圈上傳圖片萍摊,在淘寶上買東西)都可以歸結(jié)為向服務(wù)器發(fā)送消息和從服務(wù)器接收消息当凡。而兩者之間傳遞消息就需要遵守一些協(xié)議山害,不然的話就如同雞同鴨講,根本沒法進(jìn)行溝通沿量。其中在應(yīng)用層用的最多的就是HTTP協(xié)議(HyperText Transfer Protocol浪慌,超文本傳輸協(xié)議)。而HTTP協(xié)議傳輸?shù)臄?shù)據(jù)沒有進(jìn)行過任何加密操作朴则,基本上就相當(dāng)于在網(wǎng)上裸奔权纤。于是在HTTP協(xié)議的基礎(chǔ)上,出了一個(gè)HTTPS協(xié)議(HyperText Transfer Protocol over Secure Socket Layer)乌妒⌒谙耄可以理解為HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層撤蚊,HTTPS 的安全基礎(chǔ)是 SSL/TLS古掏,加密的處理就需要 SSL/TLS,用于安全的 HTTP 數(shù)據(jù)傳輸侦啸。

http槽唾、https網(wǎng)絡(luò)層級(jí)

2、類比解釋HTTPS原理及誕生過程

2.1 開始天真的溝通

我們這邊有一群小甲和一個(gè)小乙光涂,小甲們是小乙的粉絲庞萍,而當(dāng)時(shí)只能通過飛鴿傳書來傳遞小甲們對(duì)小乙的喜愛之情。一開始是這樣的顶捷,每次小甲們想要想給小乙傳信件的時(shí)候挂绰,就把信件綁在信鴿腿上屎篱,通過信鴿飛到小乙那邊服赎,小乙從信鴿腿上去下信件讀取消息葵蒂,然后根據(jù)信件里的發(fā)件人和地址用同樣的方式回信件給小甲們。

直到有一天重虑,有個(gè)叫小壞的人践付,在信鴿飛行的途中,把信鴿攔截了下來缺厉,偷偷看了里面的信件永高,甚至還修改了信件里面的內(nèi)容,再把信鴿放走讓它繼續(xù)往目的地飛過去提针。這個(gè)操作有天被小甲們和小乙知道了命爬,他們就不樂意了,感覺自己的隱私受到了侵犯辐脖。

2.2 加密

于是小甲們和小乙就決定用密碼寫他們的信息饲宛,他們將每個(gè)字母在字母表中移動(dòng)3個(gè)位置。例如嗜价,D→A艇抠,E→B,F(xiàn)→C久锥。消息“secret message”將是“pbzobq jbppxdb”〖矣伲現(xiàn)在如果小壞就算攔截了鴿子,也看不懂里面的內(nèi)容了瑟由。

可是好景不長絮重,有個(gè)小甲有一天說漏了嘴,讓小壞知道了加密規(guī)則歹苦,小壞按照規(guī)則绿鸣,就可以反推出真實(shí)的消息。

這時(shí)候小甲們和小乙決定暂氯,每個(gè)小甲每一串互發(fā)信件的過程潮模,都和小乙重新商討一遍加密規(guī)則。這樣就算小壞知道了其中一個(gè)小甲這串信件的規(guī)則痴施,頂多也就能破解這個(gè)小甲和小乙這串信件擎厢,對(duì)于其他小甲們和其他信件串就無法破解了。

但問題又出現(xiàn)了辣吃,小甲和小乙都不在一個(gè)地方动遭,商討規(guī)則也只能通過飛鴿傳書,如果每次在商討規(guī)則的時(shí)候鴿子被小壞截下來了神得,那豈不是又就要被小壞知道秘密了厘惦。

2.3 飛鴿帶箱子

為了解決上面一個(gè)問題,小甲們和小乙提供了一個(gè)更好的方案哩簿。當(dāng)小甲想要給小乙發(fā)送封信件的時(shí)宵蕉,會(huì)按照下面的步驟進(jìn)行操作:

① 小甲發(fā)送一封沒有內(nèi)容的信件通過鴿子給小乙酝静。

② 小乙把鴿子帶回家,給鴿子綁上一個(gè)開著帶鎖的箱子羡玛,自己保存著開鎖的鑰匙别智。

③ 小甲拿到箱子,把信放在箱子里面稼稿,合上箱子薄榛,通過鴿子給小乙

④ 小乙拿到箱子,通過鑰匙打開箱子让歼,讀取信件敞恋。

這樣小壞就算攔截了鴿子,沒有鑰匙也打不開箱子谋右,也就無法讀取里面的信件了耳舅。這樣一來問題看似就解決了,但是還出來了一個(gè)新的問題,如果小壞偽裝成小乙,在小乙給小甲箱子的時(shí)候把鴿子攔截下來须板,換上一個(gè)新的鑰匙在小壞手里的箱子坤次。那之后小甲把信件放在這個(gè)箱子里,傳給小乙時(shí)候,小壞再攔下這個(gè)鴿子,打開箱子,讀取修改信件冕香,再把信件放到小乙給的那個(gè)箱子里。那不就又被小壞得逞了后豫。

2.4 確認(rèn)箱子是真的

為了解決上面一個(gè)問題悉尾,小乙決定給自己的箱子簽上名。這樣當(dāng)小甲收到箱子時(shí)候檢查一下這個(gè)簽名是不是小乙的簽名挫酿,這樣就可以判斷中途箱子有沒有被小壞掉包了构眯。但是小甲如何判斷小乙的簽名的真假呢?這時(shí)候小甲和小乙就找到了一批德高望重的長者早龟。長者給了小乙一個(gè)含有小乙名字的印章惫霸,每次傳箱子時(shí)候,在箱子上蓋一個(gè)這個(gè)印章葱弟。同時(shí)德高望重的長者承諾給人頒發(fā)印章時(shí)候壹店,只會(huì)給人發(fā)這個(gè)人自己名字的印章,而不會(huì)給他發(fā)別人名字的印章芝加。小甲拿到箱子時(shí)候硅卢,看到印章里面的名字是小乙,再去問一下長者,這個(gè)印子是真印子沒錯(cuò)吧将塑。得到長者的肯定答復(fù)后脉顿,就可以確定這個(gè)箱子是小乙傳來的那個(gè)箱子了。到此似乎小壞已經(jīng)沒有空子可以鉆了抬旺。但還有一個(gè)問題弊予,那就是祥楣,如果小乙小給小甲回消息开财,似乎也要有這么一個(gè)傳箱子的費(fèi)勁事情。而且箱子真的很重误褪,鴿子不想一直帶著箱子來回跑责鳍。

2.5 箱子太重

雖然前面的一頓操作已經(jīng)讓小壞沒有機(jī)會(huì)了。但是箱子真的太重了兽间,影響了鴿子的飛行速度历葛。于是小甲們和小乙決定,小甲只在箱子里面放加密規(guī)則嘀略。一旦小乙收到加密規(guī)則后恤溶,之后的通信就按照前面所說的加密方式進(jìn)行通信。因?yàn)橐呀?jīng)通過箱子印章操作解決了在商討規(guī)則時(shí)候被小壞攔截下來的問題帜羊。

到此整個(gè)小甲們和小乙通信的過程就得到了很好的保密咒程,同時(shí)也盡可能的減少了鴿子的壓力。

3讼育、HTTPS原理解釋

其實(shí)HTTPS的操作就如同前面所說帐姻,接下來從專業(yè)的角度解釋一下前面所說的小甲們小乙長者箱子等個(gè)代表什么意思,同時(shí)再串一遍HTTPS的通信過程奶段。

小甲們:客戶端

小乙:服務(wù)端

小壞:黑客

商討規(guī)則的加密方式:對(duì)稱加密

箱子和鑰匙:非對(duì)稱加密里的公鑰和私鑰

長者們:證書頒發(fā)機(jī)構(gòu)CA饥瓷,如Symantec、Comodo痹籍、GoDaddy呢铆、GlobalSign等。

長者給小乙印章:如果需要采用HTTPS協(xié)議服務(wù)端需要向CA申請(qǐng)認(rèn)證證書蹲缠。

箱子太重:非對(duì)稱加密要比對(duì)稱加密復(fù)雜刺洒,加解密過程更加耗費(fèi)時(shí)間。

而整個(gè)HTTPS通信步驟大致如下:

① 客戶端發(fā)送一個(gè)空消息給服務(wù)端

② 服務(wù)端將包含有非對(duì)稱加密公鑰和CA認(rèn)證證書的服務(wù)器證書傳給客戶端

③ 客戶端根據(jù)放在本地庫里面的CA證書列表判斷傳來的CA認(rèn)證證書是否是有效的

④ 客戶端隨機(jī)生成對(duì)稱加密公鑰吼砂,并將這個(gè)對(duì)稱加密公鑰用從服務(wù)器傳來的非對(duì)稱加密公鑰加密逆航,發(fā)給服務(wù)端。

⑤ 服務(wù)端收到用非對(duì)稱加密公鑰加密過的數(shù)據(jù)渔肩,通過非對(duì)稱加密的私鑰解密因俐,獲取里面的對(duì)稱加密公鑰。

⑥ 服務(wù)端和客戶端用對(duì)稱加密公鑰對(duì)消息進(jìn)行加密后互相發(fā)送通信。

4抹剩、SSL/TSL

根據(jù)前面所述撑帖,已經(jīng)大致走通了HTTPS的通信流程,這邊再對(duì)服務(wù)端(小乙)如何CA機(jī)構(gòu)(長者們)申請(qǐng)認(rèn)證證書(印章)澳眷,以及客戶端(小甲們)如何向驗(yàn)證證書進(jìn)行一下說明胡嘿。這層驗(yàn)證是基于網(wǎng)絡(luò)層里面SSL/TSL層進(jìn)行的。

CA即證書授權(quán)中心( certificate authority)钳踊,這些機(jī)構(gòu)受國際認(rèn)可衷敌。他會(huì)對(duì)他受信任的申請(qǐng)對(duì)象頒發(fā)相應(yīng)的證書server.crt,同時(shí)他可以隨時(shí)吊銷申請(qǐng)對(duì)象的證書拓瞪。而客戶端的本地一般會(huì)存儲(chǔ)有ca.crt缴罗,可以來驗(yàn)證server.crt的正確性。要看本地的ca.crt對(duì)于chrome瀏覽器可以通過:設(shè)置 -> 高級(jí) -> 管理證書 -> 授權(quán)中心 查看祭埂。服務(wù)端想申請(qǐng)server.crt面氓,需要先生成一對(duì)server.pub/server.key(傳信件的帶鎖箱子和解鎖鑰匙),然后將組織信息蛆橡,個(gè)人信息(域名等)和server.pub(帶鎖箱子)一起打包成一個(gè)server.req即申請(qǐng)認(rèn)證文件給CA認(rèn)證機(jī)構(gòu)舌界。CA認(rèn)證機(jī)構(gòu)通過線上、線下等多種手段驗(yàn)證申請(qǐng)者提供信息的真實(shí)性泰演,如組織是否存在呻拌、企業(yè)是否合法,是否擁有域名的所有權(quán)等粥血。如果一切合法柏锄,就向申請(qǐng)者簽發(fā)認(rèn)證文件證書。證書里面包含如下信息:申請(qǐng)者公鑰(帶鎖箱子)复亏、申請(qǐng)者的組織信息和個(gè)人信息趾娃、簽發(fā)機(jī)構(gòu) CA的信息、有效時(shí)間缔御、證書序列號(hào)等明文信息抬闷,同時(shí)包含一個(gè)簽名。最后一個(gè)簽名很關(guān)鍵耕突,它是通過如下算法生成的:首先笤成,使用散列函數(shù)計(jì)算明文信息的信息摘要。然后用 CA的私鑰(ca.key)對(duì)信息摘要進(jìn)行加密眷茁,密文就是這個(gè)簽名炕泳。而這個(gè)簽名的解密公鑰就是前面說的放在本地的ca.crt。每當(dāng)客戶端向服務(wù)端發(fā)起請(qǐng)求上祈,服務(wù)端需要返回證書文件培遵≌丬剑客戶端讀取證書中的明文信息,采用同樣的散列函數(shù)計(jì)算得到信息摘要籽腕。然后利用對(duì)應(yīng)CA機(jī)構(gòu)的ca.crt去解密簽名嗡呼。如果計(jì)算的信息摘要和解密出來的簽名一致,代表這個(gè)信息沒有被篡改過皇耗,是可信的信息南窗。也就是說信息里面的公鑰(帶鎖箱子)合法,客戶端然后會(huì)驗(yàn)證證書相關(guān)的域名信息郎楼、有效時(shí)間万伤、是否吊銷等信息。 一切通過了箭启,這時(shí)候就可以用證書明文信息里面的公鑰(帶鎖箱子)進(jìn)行加密客戶端隨機(jī)生成的對(duì)稱加密的公鑰了壕翩。整個(gè)流程如下圖:

證書流程圖

Tips:從上面的表述可以看到蛉迹,公鑰可以用來加密也可以用來解密傅寡,私鑰也是一樣。兩者的區(qū)別在于私鑰只有創(chuàng)建者知道北救,公鑰是傳出去給需要的人用的荐操。公鑰加密的信息只有對(duì)應(yīng)私鑰能解密讀取,私鑰加密的信息只有對(duì)應(yīng)公鑰能解密讀取珍策。CA就是用自己的私鑰(ca.key)對(duì)證書加密托启,用公鑰(ca.crt)對(duì)證書解密。而服務(wù)端是用公鑰(帶鎖箱子)來對(duì)信息進(jìn)行加密攘宙,用私鑰(解鎖鑰匙)來對(duì)信息進(jìn)行解密的屯耸。這種是一對(duì)公私鑰的加密方式指非對(duì)稱加密〔渑客戶端隨機(jī)生成的一對(duì)都是公鑰的加密方式指對(duì)稱加密疗绣,這種被公鑰加密過的信息,所有公鑰都能解密出來铺韧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末多矮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哈打,更是在濱河造成了極大的恐慌塔逃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件料仗,死亡現(xiàn)場離奇詭異湾盗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)立轧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門格粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丙挽,“玉大人,你說我怎么就攤上這事匀借⊙詹” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵吓肋,是天一觀的道長凳怨。 經(jīng)常有香客問我,道長是鬼,這世上最難降的妖魔是什么肤舞? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮均蜜,結(jié)果婚禮上李剖,老公的妹妹穿的比我還像新娘。我一直安慰自己囤耳,他們只是感情好篙顺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著充择,像睡著了一般德玫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椎麦,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天宰僧,我揣著相機(jī)與錄音,去河邊找鬼观挎。 笑死琴儿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘁捷。 我是一名探鬼主播造成,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼普气!你這毒婦竟也來了谜疤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤现诀,失蹤者是張志新(化名)和其女友劉穎夷磕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仔沿,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坐桩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了封锉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绵跷。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膘螟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碾局,到底是詐尸還是另有隱情荆残,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布净当,位于F島的核電站内斯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏像啼。R本人自食惡果不足惜俘闯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忽冻。 院中可真熱鬧真朗,春花似錦、人聲如沸僧诚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振诬。三九已至蹭睡,卻和暖如春衍菱,著一層夾襖步出監(jiān)牢的瞬間赶么,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工脊串, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫呻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓琼锋,卻偏偏與公主長得像放闺,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缕坎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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