當(dāng)前位置:首頁 > 公眾號(hào)精選 > CPP開發(fā)者
[導(dǎo)讀]我是一個(gè)瀏覽器,每到夜深人靜的時(shí)候,主人就打開我開始學(xué)習(xí)。為了不讓別人看到瀏覽記錄,主人選擇了“無痕模式”。但網(wǎng)絡(luò)中總是有很多壞人,他們通過抓包截獲我和服務(wù)器的通信,主人干了什么,請(qǐng)求了什么數(shù)據(jù)全被他們知道了!光竊聽也就罷了,他們還經(jīng)常篡改內(nèi)容,在網(wǎng)頁里面插入誘人的小廣告,真是太...

我是一個(gè)瀏覽器,每到夜深人靜的時(shí)候,主人就打開我開始學(xué)習(xí)。為了不讓別人看到瀏覽記錄,主人選擇了“無痕模式”。

但網(wǎng)絡(luò)中總是有很多壞人,他們通過抓包截獲我和服務(wù)器的通信,主人干了什么,請(qǐng)求了什么數(shù)據(jù)全被他們知道了!

光竊聽也就罷了,他們還經(jīng)常篡改內(nèi)容,在網(wǎng)頁里面插入誘人的小廣告,真是太壞了!

為了保護(hù)主人的隱私還他一個(gè)干凈的上網(wǎng)環(huán)境,我決定對(duì)通信加密!

第一版:直接簡(jiǎn)單加密

加密嘛,很簡(jiǎn)單,把原來要發(fā)送的數(shù)據(jù)加密處理后再發(fā)給服務(wù)器就行了。

為了安全,密鑰當(dāng)然不能固定,每一次通信都要隨機(jī)生成。

不過接下來我犯難了,我該怎么把這個(gè)秘鑰告訴服務(wù)器呢,服務(wù)器沒有秘鑰就解不了密,也就不知道我在請(qǐng)求什么資源了。

也不能直接弄個(gè)字段告訴服務(wù)器密鑰,那樣別人也能拿到,就跟沒加密一樣了。

我左思右想,靈機(jī)一動(dòng),決定把密鑰放在數(shù)據(jù)的開頭幾個(gè)字節(jié)藏起來,只要私下服務(wù)器約定好,他用這前幾個(gè)字節(jié)作為密鑰解密,就能解開我發(fā)送的數(shù)據(jù)了。

你還別說,這辦法還真好使,我跟服務(wù)器開始秘密通信起來。

后來,找我使用這種辦法通信的服務(wù)器變得越來越多。

再后來這事就在圈子里傳開了,大家都知道數(shù)據(jù)的前幾個(gè)字節(jié)是密鑰了,誰都能解密了。

看來這個(gè)辦法不行,我得重新思考加密方法了。

第二版:非對(duì)稱加密

服務(wù)器告訴我,我們之前用的那種加密算法叫對(duì)稱加密算法,也就是加密和解密使用的同一個(gè)秘鑰。

還有一種叫非對(duì)稱加密算法,這種算法有兩個(gè)秘鑰,一個(gè)公開的叫公鑰,一個(gè)私藏的叫私鑰。

最關(guān)鍵的是,公鑰加密后只能用私鑰解開,反過來也一樣。

只要在正式的數(shù)據(jù)傳輸前,服務(wù)器把他的公鑰告訴我,我后面用它加密數(shù)據(jù)就行了,就算被別人抓包,他也解不開,因?yàn)橹挥袚碛兴借€的服務(wù)器才能解開。

不得不說,這非對(duì)稱加密真是個(gè)好東西??!

不過這樣一來只能單程加密,服務(wù)器能解密我發(fā)的,但他發(fā)給我的,我卻解不了,也不能讓他用私鑰加密,我用公鑰解密,因?yàn)楣€是公開的,誰收到都能解,不安全。

沒辦法,我也弄了一對(duì)兒秘鑰,通信之前我們雙方都交換一下彼此的公鑰,這樣就可以雙向加解密了!

雖然是有點(diǎn)麻煩,但為了數(shù)據(jù)安全,忍了吧!

第三版:非對(duì)稱與對(duì)稱加密結(jié)合

但我忍了沒幾天就忍不住了。

這個(gè)非對(duì)稱加密算法好是好,就是加解密太費(fèi)時(shí)間了,導(dǎo)致我渲染一個(gè)網(wǎng)頁要花很久時(shí)間,卡的不行。

我打算去跟服務(wù)器商量一下辦法,沒想到服務(wù)器比我更頭疼,他要服務(wù)很多瀏覽器,每一個(gè)都這么加解密,把他累的夠嗆。

于是我們決定,還是用原來的對(duì)稱加密算法,這樣快得多。但是一開始的時(shí)候可以用非對(duì)稱加密算法來傳輸后面要用的秘鑰,把兩種算法的優(yōu)勢(shì)結(jié)合起來。

這一來,我只需要把后面要用到的秘鑰,通過服務(wù)器公鑰加密后發(fā)給他就行了,我省去了不少事兒。

第四版:秘鑰計(jì)算

有一天,服務(wù)器告訴我,我們現(xiàn)在的秘鑰就是一個(gè)隨機(jī)數(shù),而隨機(jī)數(shù)并不是真正隨機(jī)的,可能被預(yù)測(cè)出來,所以我們得提升這個(gè)秘鑰的安全性。

一個(gè)隨機(jī)數(shù)不夠,那就多弄幾個(gè)!

一端容易被猜出來,那就兩端一起生成!

我們決定各自生成一個(gè)隨機(jī)數(shù)發(fā)給對(duì)方,我再額外加密傳輸一個(gè)隨機(jī)數(shù)給服務(wù)器,這一來,咱們雙方都有3個(gè)隨機(jī)數(shù)了,然后雙方都用這三個(gè)隨機(jī)數(shù)計(jì)算出真正的秘鑰,這可比一個(gè)單純的隨機(jī)數(shù)要安全得多了。

不過為了驗(yàn)證雙方計(jì)算出來的秘鑰是一樣的,我們?cè)谡綌?shù)據(jù)傳輸前,需要先來測(cè)試一下,現(xiàn)在的流程變成了這個(gè)樣子:

我們的這一方案很快得到了大家的認(rèn)可,圈子里的瀏覽器和服務(wù)器們紛紛用上了這套方案。

第五版:數(shù)字證書

原以為這個(gè)方案已經(jīng)萬無一失了,沒想到我和服務(wù)器的通信還是泄露了···

原來有個(gè)家伙冒充服務(wù)器跟我通信,然后又冒充我跟服務(wù)器通信,把我的請(qǐng)求進(jìn)行了轉(zhuǎn)發(fā),我們倆都被蒙在鼓里,這就是中間人攻擊。

看來還缺乏一個(gè)認(rèn)證機(jī)制!我得知道和我通信的是不是真的服務(wù)器。

經(jīng)過大家的商量,圈子里的服務(wù)器們推選了一個(gè)德高望重的前輩做公證人,讓這公證人準(zhǔn)備一對(duì)非對(duì)稱加密的密鑰,并在圈子里公開了公鑰,所有人都得把他的公鑰記下來。

服務(wù)器得去公證人這里先登記,把自己的公鑰、名字等等信息報(bào)上去,公證人拿到這些信息后,計(jì)算一個(gè)Hash值,然后再用公證人的私鑰把Hash值進(jìn)行加密,加密后的結(jié)果就是數(shù)字簽名。

證書的簽發(fā)
最后,公證人把登記的信息和這個(gè)數(shù)字簽名合在一起,封裝了一個(gè)新的文件發(fā)給服務(wù)器,登記就完成了,而這個(gè)新的文件就是數(shù)字證書。

服務(wù)器拿到證書后,可要好生保管,因?yàn)橥ㄐ诺臅r(shí)候,服務(wù)器須要將他們的證書發(fā)給我們?yōu)g覽器驗(yàn)證。

證書的驗(yàn)證
我們?yōu)g覽器拿到證書后,把證書里面的信息也計(jì)算一遍Hash,再用提前記錄好的公證人的公鑰把證書里的數(shù)字簽名進(jìn)行解密,得到公證人計(jì)算的Hash,兩個(gè)一對(duì)比,就知道這證書是不是公證人簽發(fā)的,以及有沒有被篡改過了!

只有驗(yàn)證成功才能繼續(xù)后面的流程,要不然就是冒充的!

這一下總算解決了中間人冒充的問題,除非中間人偷到了公證人的私鑰,否則他是沒辦法偽造出一個(gè)證書來的。

非對(duì)稱加密除了加密數(shù)據(jù),還能用來驗(yàn)證身份,真是YYDS!

第六版:信任鏈

我們這加密方案一傳十,十傳百,很快就傳遍了整個(gè)互聯(lián)網(wǎng),想要使用這套方案的服務(wù)器越來越多,畢竟,誰都不希望自己的網(wǎng)站被人插入小廣告。

可原來的那個(gè)公證人有些忙不過來了,于是,大家開始推選更多的公證人,公證人開始多了起來,不僅多了起來,而且還形成了產(chǎn)業(yè)鏈。

原來的公證人變成了一代目,一代目可以給新的公證人簽發(fā)證書,新的公證人就變成了二代目,還有三代目,搞得跟傳銷似的。

原來只有一個(gè)公證人的時(shí)候,大家直接保存他的公鑰就行了?,F(xiàn)在公證人越來越多,我們沒辦法保存所有的公證人的公鑰了,就算能保存得下,但有新的公證人出現(xiàn)的時(shí)候我們也做不到實(shí)時(shí)更新。

于是,大家約定,讓所有的一代目公證人自己給自己簽發(fā)一個(gè)證書,叫做根證書,并安裝在我們的操作系統(tǒng)中。

以后在驗(yàn)證網(wǎng)站服務(wù)器的證書時(shí),就得先去驗(yàn)證證書的簽發(fā)者,然后再繼續(xù)驗(yàn)證上一級(jí)簽發(fā)者,直到驗(yàn)證最終的簽發(fā)者是不是在根證書列表中。

只要最終的簽發(fā)者在系統(tǒng)的根證書列表中,那這條鏈上簽署的證書就都是受信任的,否則我們就會(huì)彈窗提醒用戶:

如今,這套方案已經(jīng)推廣到了全世界,現(xiàn)在遇到使用這套方案的網(wǎng)站服務(wù)器時(shí),我們瀏覽器就會(huì)在地址欄加上一把小鎖,表示網(wǎng)站很安全,還把URL地址,從HTTP,改成了HTTPS···

PS:本文用故事形式講述了HTTPS是如何工作的,只是起一個(gè)引領(lǐng)入門的作用,略去了很多細(xì)節(jié),實(shí)際情況遠(yuǎn)比這復(fù)雜,比如對(duì)稱加密秘鑰的計(jì)算方式、秘鑰的交換算法(RSA、DH、ECDH還有區(qū)別),雙方測(cè)試秘鑰正確性的方式都沒有體現(xiàn)出來,有機(jī)會(huì)再寫一篇正經(jīng)的技術(shù)文來詳細(xì)抓包剖析HTTPS詳細(xì)流程。

希望本文對(duì)大家理解HTTPS機(jī)制有一些幫助,再看其他專業(yè)介紹時(shí)不再吃力。

- EOF -

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉