成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

也許,這樣理解HTTPS更容易!

安全 應(yīng)用安全
本文嘗試一步步還原HTTPS的設(shè)計(jì)過程,以理解為什么HTTPS最終會(huì)是這副模樣。但是這并不代表HTTPS的真實(shí)設(shè)計(jì)過程。在閱讀本文時(shí),你可以嘗試放下已有的對(duì)HTTPS的理解,這樣更利于“還原”過程。

[[282107]]

 本文嘗試一步步還原HTTPS的設(shè)計(jì)過程,以理解為什么HTTPS最終會(huì)是這副模樣。但是這并不代表HTTPS的真實(shí)設(shè)計(jì)過程。在閱讀本文時(shí),你可以嘗試放下已有的對(duì)HTTPS的理解,這樣更利于“還原”過程。

我們先不了聊HTTP,HTTPS,我們先從一個(gè)聊天軟件說起,我們要實(shí)現(xiàn)A能發(fā)一個(gè)hello消息給B:

 

如果我們要實(shí)現(xiàn)這個(gè)聊天軟件,本文只考慮安全性問題,要實(shí)現(xiàn):A發(fā)給B的hello消息包,即使被中間人攔截到了,也無法得知消息的內(nèi)容。

如何做到真正安全

這個(gè)問題,很多人馬上就想到了各種加密算法,什么對(duì)稱加密、非對(duì)稱加密、DES、RSA、XX、噼里啪啦~

而我想說,加密算法只是解決方案,我們首先要做的是理解我們的問題域——什么是安全?

我個(gè)人的理解是:A與B通信的內(nèi)容,有且只有A和B有能力看到通信的真正內(nèi)容。好,問題域已經(jīng)定義好了(現(xiàn)實(shí)中當(dāng)然不止這一種定義)。對(duì)于解決方案,很容易就想到了對(duì)消息進(jìn)行加密。

題外話,但是只有這一種方法嗎?我看未必,說不定在將來會(huì)出現(xiàn)一種物質(zhì)打破當(dāng)前世界的通信假設(shè),實(shí)現(xiàn)真正意義上的保密。

對(duì)于A與B這樣的簡(jiǎn)單通信模型,我們很容易做出選擇:

 

這就是對(duì)稱加密算法,其中圖中的密鑰S同時(shí)扮演加密和解密的角色。具體細(xì)節(jié)不是本文范疇。

只要這個(gè)密鑰S不公開給第三者,同時(shí)密鑰S足夠安全,我們就解決了我們一開始所定問題域了。因?yàn)槭澜缟嫌星抑挥蠥與B知道如何加密和解密他們之間的消息。但是,在WWW環(huán)境下,我們的Web服務(wù)器的通信模型沒有這么簡(jiǎn)單:

 

如果服務(wù)器端對(duì)所有的客戶端通信都使用同樣的對(duì)稱加密算法,無異于沒有加密。那怎么辦呢?即能使用對(duì)稱加密算法,又不公開密鑰?請(qǐng)讀者思考21秒鐘。

答案是:Web服務(wù)器與每個(gè)客戶端使用不同的對(duì)稱加密算法:

 

但是,你協(xié)商的過程是沒有加密的,還是會(huì)被中間人攔截。那我們?cè)賹?duì)這個(gè)協(xié)商過程進(jìn)行對(duì)稱加密就好了,那你對(duì)協(xié)商過程加密的加密還是沒有加密,怎么辦?再加密不就好了……好吧,進(jìn)行雞生蛋蛋生雞的問題了。

如何對(duì)協(xié)商過程加密

新問題來了,如何對(duì)協(xié)商過程進(jìn)行加密?密碼學(xué)領(lǐng)域中,有一種稱為“非對(duì)稱加密”的加密算法,特點(diǎn)是私鑰加密后的密文,只要是公鑰,都可以解密,但是公鑰加密后的密文,只有私鑰可以解密。私鑰只有一個(gè)人有,而公鑰可以發(fā)給所有的人。

 

雖然服務(wù)器端向A、B……的方向還是不安全的,但是至少A、B向服務(wù)器端方向是安全的。好了,如何協(xié)商加密算法的問題,我們解決了:使用非對(duì)稱加密算法進(jìn)行對(duì)稱加密算法協(xié)商過程。

這下,你明白為什么HTTPS同時(shí)需要對(duì)稱加密算法和非對(duì)稱加密算法了吧?

協(xié)商什么加密算法

要達(dá)到Web服務(wù)器針對(duì)每個(gè)客戶端使用不同的對(duì)稱加密算法,同時(shí),我們也不能讓第三者知道這個(gè)對(duì)稱加密算法是什么,怎么辦?

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

這下,你明白為什么HTTPS協(xié)議握手階段會(huì)有這么多的隨機(jī)數(shù)了吧。

如何得到公鑰

細(xì)心的人可能已經(jīng)注意到了如果使用非對(duì)稱加密算法,我們的客戶端A,B需要一開始就持有公鑰,要不沒法開展加密行為啊。這下,我們又遇到新問題了:如何讓A、B客戶端安全地得到公鑰?

我能想到的方案只有這些:

1:服務(wù)器端將公鑰發(fā)送給每一個(gè)客戶端

2:服務(wù)器端將公鑰放到一個(gè)遠(yuǎn)程服務(wù)器,客戶端可以請(qǐng)求得到

我們選擇方案1,因?yàn)榉桨?又多了一次請(qǐng)求,還要另外處理公鑰的放置問題。公鑰被調(diào)包了怎么辦?又是一個(gè)雞生蛋蛋生雞問題?

但是方案1有個(gè)問題:如果服務(wù)器端發(fā)送公鑰給客戶端時(shí),被中間人調(diào)包了,怎么辦?

我畫了張圖方便理解:

 

顯然,讓每個(gè)客戶端的每個(gè)瀏覽器默認(rèn)保存所有網(wǎng)站的公鑰是不現(xiàn)實(shí)的。

使用第三方機(jī)構(gòu)的公鑰解決雞生蛋蛋生雞問題

公鑰被調(diào)包的問題出現(xiàn),是因?yàn)槲覀兊目蛻舳藷o法分辨返回公鑰的人到底是中間人,還是真的服務(wù)器。這其實(shí)就是密碼學(xué)中提的身份驗(yàn)證問題。

如果讓你來解決,你怎么解決?如果你了解過HTTPS,會(huì)知道使用數(shù)字證書來解決。但是你想過證書的本質(zhì)是什么么?請(qǐng)放下你對(duì)HTTPS已有的知識(shí),自己嘗試找到解決方案。

我是這樣解決的。既然服務(wù)器需要將公鑰傳給客戶端,這個(gè)過程本身是不安全,那么我們?yōu)槭裁床粚?duì)這個(gè)過程本身再加密一次?可是,你是使用對(duì)稱加密,還是非對(duì)稱加密?這下好了,我感覺又進(jìn)了雞生蛋蛋生雞問題了。

問題的難點(diǎn)是如果我們選擇直接將公鑰傳遞給客戶端的方案,我們始終無法解決公鑰傳遞被中間人調(diào)包的問題。

所以,我們不能直接將服務(wù)器的公鑰傳遞給客戶端,而是第三方機(jī)構(gòu)使用它的私鑰對(duì)我們的公鑰進(jìn)行加密后,再傳給客戶端。客戶端再使用第三方機(jī)構(gòu)的公鑰進(jìn)行解密。

下圖就是我們?cè)O(shè)計(jì)的第一版“數(shù)字證書”,證書中只有服務(wù)器交給第三方機(jī)構(gòu)的公鑰,而且這個(gè)公鑰被第三方機(jī)構(gòu)的私鑰加密了:

 

如果能解密,就說明這個(gè)公鑰沒有被中間人調(diào)包。因?yàn)槿绻虚g人使用自己的私鑰加密后的東西傳給客戶端,客戶端是無法使用第三方的公鑰進(jìn)行解密的。

 

話到此,我以為解決問題了。但是現(xiàn)實(shí)中HTTPS,還有一個(gè)數(shù)字簽名的概念,我沒法理解它的設(shè)計(jì)理由。

原來,我漏掉了一個(gè)場(chǎng)景:第三方機(jī)構(gòu)不可能只給你一家公司制作證書,它也可能會(huì)給中間人這樣有壞心思的公司發(fā)放證書。這樣的,中間人就有機(jī)會(huì)對(duì)你的證書進(jìn)行調(diào)包,客戶端在這種情況下是無法分辨出是接收的是你的證書,還是中間人的。因?yàn)椴徽撝虚g人,還是你的證書,都能使用第三方機(jī)構(gòu)的公鑰進(jìn)行解密。像下面這樣:

第三方機(jī)構(gòu)向多家公司頒發(fā)證書的情況:

 

客戶端能解密同一家第三機(jī)構(gòu)頒發(fā)的所有證書:

 

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

 

數(shù)字簽名

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

只能放到客戶端了。意思是,客戶端在拿到證書后,自己就有能力分辨證書是否被篡改了。如何才能有這個(gè)能力呢?

我們從現(xiàn)實(shí)中找靈感。比如你是HR,你手上拿到候選人的學(xué)歷證書,證書上寫了持證人,頒發(fā)機(jī)構(gòu),頒發(fā)時(shí)間等等,同時(shí)證書上,還寫有一個(gè)最重要的:證書編號(hào)!我們?cè)趺磋b別這張證書是的真?zhèn)文?只要拿著這個(gè)證書編號(hào)上相關(guān)機(jī)構(gòu)去查,如果證書上的持證人與現(xiàn)實(shí)的這個(gè)候選人一致,同時(shí)證書編號(hào)也能對(duì)應(yīng)上,那么就說明這個(gè)證書是真實(shí)的。

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

 

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

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

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

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

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

 

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

 

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

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

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

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

當(dāng)我聽到這個(gè)問題時(shí),我誤以為,我們的SERVER需要發(fā)網(wǎng)絡(luò)請(qǐng)求到CA部門的服務(wù)器來拿這個(gè)證書。到底是我理解能力問題,還是。。

其實(shí),問題應(yīng)該是CA如何頒發(fā)給我們的網(wǎng)站管理員,而我們的管理員又如何將這個(gè)數(shù)字證書放到我們的服務(wù)器上。

我們?nèi)绾蜗駽A申請(qǐng)呢?每個(gè)CA機(jī)構(gòu)都大同小異,我在網(wǎng)上找了一個(gè):

 

拿到證書后,我們就可以將證書配置到自己的服務(wù)器上了。那么如何配置?這是具體細(xì)節(jié)了,留給大家google了。

也許我們需要整理下思路

我們通過推算的方式嘗試還原HTTPS的設(shè)計(jì)過程。這樣,我們也就明白了為什么HTTPS比HTTP多那么多次的交互,為什么HTTPS的性能會(huì)差,以及找到HTTPS的性能優(yōu)化點(diǎn)。

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

以下是一張HTTPS協(xié)議的真實(shí)交互圖(從網(wǎng)上copy的,忘了從哪了,如果侵權(quán)麻煩告知):

 

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

責(zé)任編輯:武曉燕 來源: showme
相關(guān)推薦

2019-03-11 15:26:26

HTTPSHTTP密鑰

2019-10-25 09:35:58

HTTPSHTTP通信

2019-11-15 09:26:36

OAuthWeb系統(tǒng)

2021-01-14 10:48:05

技術(shù)RPCRS

2013-11-25 17:14:33

Windows 9

2015-11-06 14:41:30

微軟Windows 10

2013-12-12 16:25:18

微軟Windows 9Threshold

2017-09-30 12:53:28

內(nèi)存

2017-10-09 16:27:27

Glide內(nèi)存加載庫(kù)

2017-11-21 13:15:54

Javascriptvue.jscss3

2019-07-19 17:19:19

網(wǎng)絡(luò)安全銀行軟件

2019-06-26 15:41:26

AI云原生云遷移

2019-07-25 14:48:35

AI人工智能女工

2018-02-25 12:19:02

2022-06-21 16:48:37

Python

2019-08-20 14:01:22

HTTPSSSL協(xié)議

2022-09-02 10:45:58

Micro編輯工具

2022-09-09 16:12:53

人工智能機(jī)器學(xué)習(xí)autoML

2023-12-13 13:00:57

2019-04-24 08:00:00

HTTPSHTTP前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品免费观看 | 国产精品国产精品 | 久久九| 激情网站在线观看 | 久久久久久久久久久国产 | 8x国产精品视频一区二区 | 欧美成人影院 | 精品粉嫩aⅴ一区二区三区四区 | 精品欧美一区二区三区久久久 | 欧美日韩福利视频 | 日本高清视频在线播放 | 黄a大片 | 我想看国产一级毛片 | 亚洲三级在线 | 精品成人av | 99久久影院 | 久久亚洲精品国产精品紫薇 | 精品国产一区二区国模嫣然 | 久久www免费人成看片高清 | 一级片在线免费播放 | 国产精品123区 | 天天艹日日干 | 一区二区三区av | 91看片官网| 91在线第一页 | 青青草网站在线观看 | 欧美激情在线观看一区二区三区 | av一区二区三区 | 久久尤物免费一区二区三区 | 精品国产乱码久久久久久图片 | 欧美视频一区二区三区 | 亚洲精品国产综合区久久久久久久 | 一区二区三区国产 | 久久国产精品72免费观看 | 视频一区在线观看 | 亚洲一区在线播放 | 你懂的在线视频播放 | 久久久久久蜜桃一区二区 | 亭亭五月激情 | 操网站 | www.中文字幕 |