0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

https原理過(guò)程詳解

OSC開(kāi)源社區(qū) ? 來(lái)源:OSCHINA 社區(qū) ? 作者:HelloWorld開(kāi)發(fā)者社區(qū) ? 2022-11-12 09:57 ? 次閱讀

相信很多人,對(duì) https 的過(guò)程弄不清楚,只是知道https是安全加密的,背后的原理,過(guò)程并不清楚

筆者曾經(jīng)也是對(duì)https的過(guò)程并不清楚,一知半解,而且最可氣的是每次面試,面試官很可能就問(wèn)你這個(gè)問(wèn)題

每次都答不對(duì)或者答的面試官不滿意,說(shuō)來(lái)說(shuō)去,還是自己沒(méi)有真正理解

其實(shí)https的原理過(guò)程,并沒(méi)有那么復(fù)雜,只是有些文章沒(méi)有說(shuō)清楚,這樣的文章看多了,就迷糊了。

在了解https原理的過(guò)程之前,我們先來(lái)了解一下加密的知識(shí)

一 加密知識(shí)

加密按照加密方式,可以分為以下三種方式

1.1 單向加密

也叫做不可逆加密,對(duì)明文的加密產(chǎn)生一個(gè)密文,并不能再通過(guò)密文,解出來(lái)對(duì)應(yīng)的明文

一般用于產(chǎn)生消息摘要,密鑰加密等,常見(jiàn)的單向加密有:

MD5 : 相信這個(gè)大家都都熟悉了,一個(gè)明文,md5 以后,對(duì)應(yīng)一個(gè)唯一的密文

SHA : 其中又分為 sha192 , sha256

特點(diǎn):

不可逆

輸入一樣,輸出必然相同

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

對(duì)稱(chēng)加密,用一個(gè)密鑰,對(duì)明文進(jìn)行加密,同理,同這把密鑰,也可以對(duì)密文進(jìn)行解密

也就是說(shuō)加密和解密,可以用同一個(gè)密鑰

這種加密方法就是 對(duì)稱(chēng)加密

常用的對(duì)稱(chēng)加密方法有:

DES

3DES

AES

特點(diǎn):

加密方和解密使用同一密鑰

加密解密的速度比較快

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

我們知道,對(duì)稱(chēng)加密使用同一把密鑰,相反,非對(duì)稱(chēng)加密,使用公鑰和私鑰進(jìn)行加密解密

可以使用私鑰加密,公鑰進(jìn)行解密,同理,也可以使用公鑰加密,私鑰進(jìn)行解密

常見(jiàn)非對(duì)稱(chēng)加密方式的有:

RSA

DSA

我們平時(shí)最常用的就是RSA

特點(diǎn):

使用兩把密鑰進(jìn)行加密和解密,即公鑰和私鑰

公鑰加密私鑰解密,私鑰加密公鑰可以解密

加密或者解密,速度非常慢

私鑰和公鑰是成對(duì)出現(xiàn)的

二 加密知識(shí)總結(jié)

** 單向加密:** 不可逆,只要輸入的內(nèi)容一樣,輸出的密文一定是一樣的,有任何修改, 產(chǎn)生的密文都是不同的

** 對(duì)稱(chēng)加密:** 加密和解密使用同一把密鑰,加密解密速度特別快

非對(duì)稱(chēng)加密:使用公鑰和私鑰進(jìn)行加密和解密,公鑰加密私鑰解,私鑰加密公鑰解。加密解密的過(guò)程非常慢

所謂公鑰,就是可以公開(kāi)給別人的

所謂私鑰,就是不可以公開(kāi)給別人,是自己私有保留的。

注:以上內(nèi)容,純粹是加密的知識(shí),和https沒(méi)有任何關(guān)系。下面我們開(kāi)始講解https的過(guò)程。我們先看一個(gè)需求

解決了這個(gè)需求,就明白了https的過(guò)程了。

從一個(gè)需求開(kāi)始

假設(shè)有這樣一個(gè)需求:小明和小花需要通信,少男少女寫(xiě)情書(shū)嘛,肯定不想讓別人看到,所以需要安全的通信。

問(wèn)題一: 小明如何安全的把內(nèi)容傳給小花?

通過(guò)上面的加密知識(shí)的學(xué)習(xí),我們很容易就想到,把通信的內(nèi)容,給加密了就行了啊

答案是對(duì)的,把通信的內(nèi)容給加密就行了。

問(wèn)題二:使用哪種加密方式加密呢?

單向加密肯定不行,小花收到信,解不出來(lái),這戀愛(ài)沒(méi)法談

對(duì)稱(chēng)加密可以,小花只要有密鑰,就可以把內(nèi)容解出來(lái)

非對(duì)稱(chēng)加密也可以,小明用自己的私鑰加密,小花拿到小明的公鑰,也可以把內(nèi)容解出來(lái)

問(wèn)題三:對(duì)稱(chēng)加密,非對(duì)稱(chēng)加密都可以,到底使用哪種呢?

通過(guò)上面的加密知識(shí)的學(xué)習(xí),我們知道

對(duì)稱(chēng)加密速度快,非對(duì)稱(chēng)加密速度慢

那么對(duì)于小明,小花這倆人來(lái)說(shuō),經(jīng)常一聊就是幾個(gè)小時(shí),數(shù)據(jù)是非常多的

如果使用非對(duì)稱(chēng)加密,那估計(jì)得郁悶死,因?yàn)榧用芤猜饷芤猜?,這倆人肯定不會(huì)用非對(duì)稱(chēng)加密,要是我,我也不用,急死個(gè)人。

那么答案就是,使用對(duì)稱(chēng)加密方式,因?yàn)榧用芸彀。∶餍』?,都持有同一把密鑰,雙方互相都能解密出來(lái)對(duì)方發(fā)的信。

總結(jié):小明和小花通信,使用對(duì)稱(chēng)加密,假如密鑰是S, 雙方都使用同一把密鑰S進(jìn)行加密,解密

這樣小明和小花就能愉快的通信了,而且內(nèi)容是加密的,加密解密的速度也很快,這很美好。

但是這樣有一個(gè)隱患,就是密鑰S, 在傳輸?shù)倪^(guò)程中,不小心被 老王 截獲了

造成的后果就是:小明,小花以及老王,都有相同的密鑰S了

那么,小明和小花之間沒(méi)有秘密可言了,他們發(fā)的信,老王都能解開(kāi)看,看完再加密,再發(fā)給小花,這還得了。

11fa2330-61c8-11ed-8abf-dac502259ad0.png?

那么如何解決密鑰S在傳輸?shù)倪^(guò)程中,被別人截獲的情況呢?

有人說(shuō),可以對(duì)稱(chēng)加密方式對(duì)密鑰S進(jìn)行加密, 再傳輸,那么此時(shí)的密鑰S1也是有被截獲的風(fēng)險(xiǎn)啊

那就再對(duì) S1 進(jìn)行加密,再傳輸...... , 這樣就無(wú)窮盡了。肯定是行不能的。

上面的方法肯定是不行了,現(xiàn)在的問(wèn)題,變成了:小明如何把密鑰S安全的傳給小花, 這是不是和之前的問(wèn)題一小明如何安全的把內(nèi)容傳給小花?類(lèi)似

所以,小明和小花如何要安全的通信,就需要使用對(duì)稱(chēng)加密把信件內(nèi)容加密傳輸

那么就得先解決一個(gè)問(wèn)題:小明如何安全的把密鑰S傳輸給小花?

問(wèn)題四:小明如何安全的把密鑰S傳輸給小花?

如果密鑰S的傳輸過(guò)程不安全,那么后面的通信就是不安全的,反之,如何密鑰S能安全的傳輸給小花,那么后面的通信就是安全的。

如果這是領(lǐng)導(dǎo)交待給我們這樣一個(gè)活,我們使用自己學(xué)到的上面的加密知識(shí),應(yīng)該怎么解決呢?

通過(guò)上面的加密知識(shí)的學(xué)習(xí),是不是有下面這樣一個(gè)安全的加密傳輸方式

小明使用非對(duì)稱(chēng)加密進(jìn)行通信,首先小明生成了自己的一對(duì)私鑰和公鑰,為了方便,分別叫做privateKey,publicKey

小明把publicKey給了小花

方法一:小明用自己的privateKey,對(duì)密鑰S進(jìn)行加密,加密后的密文S0傳輸給小花,小花用publicKey對(duì)S0解密出來(lái)密鑰S

** 方法二:** 小花用publicKey對(duì)密鑰S進(jìn)行加密,加密后的密文S0傳輸給小明,小明用privatekey對(duì)S0解密出來(lái)密鑰S

上面,方法一 是不可行的,因?yàn)樾∶鞯膒ublicKey是公開(kāi)的,誰(shuí)都可以下載,也就是說(shuō),老王也有小明的publicKey,也可以對(duì)S0進(jìn)行解密出來(lái)密鑰S

方法二是可行的,因?yàn)閜rivateKey只有小明有,小花用小明的公鑰進(jìn)行加密,只有小明能解開(kāi),其它任何人都解不開(kāi)

所以上面的解決方案就是:

使用非對(duì)稱(chēng)加密方式,對(duì)密鑰S進(jìn)行加密,進(jìn)行傳輸

有人說(shuō),不對(duì)啊,非對(duì)稱(chēng)加密性能不好,加密解密特別慢,要不剛一開(kāi)始,小明,小花直接使用非對(duì)稱(chēng)加密進(jìn)行通信,不就行了嘛

說(shuō)的是對(duì)的,不過(guò)我們這里只是使用非對(duì)稱(chēng)加密對(duì)密鑰S進(jìn)行加密,這個(gè)數(shù)據(jù)量很小的,而且密鑰S安全的傳輸給對(duì)方之后

后面的通信就直接使用對(duì)稱(chēng)加密了,這樣效率就高了,而非對(duì)稱(chēng)加密只是在開(kāi)始協(xié)商怎么安全傳輸密鑰S的階段使用了,此階段完成后,就不再需要使用了。

通過(guò)上面可知:非對(duì)稱(chēng)加密有這樣的特性

我只要拿到誰(shuí)的公鑰,我和誰(shuí)通信,就是安全的

比如,你有一對(duì)私鑰和公鑰,我只要拿到你的公鑰,然后用你的公鑰進(jìn)行加密傳輸內(nèi)容,只有你自己能解開(kāi),因?yàn)樗借€只有你自己有

如下:

1254d5d2-61c8-11ed-8abf-dac502259ad0.png

反過(guò)來(lái),小明用自己的私鑰加密,其它人使用小明的公鑰解密,這個(gè)過(guò)程的作用是什么的呢?

答案是:驗(yàn)證身份的。

只要小明用自己的私鑰加密,其它人用小明的公鑰如果能解開(kāi),那么證明這封信一定以及肯定是小明寫(xiě)的

比如你需要發(fā)一個(gè)通知,但是又要確保這個(gè)通知一定是你發(fā)的,為了怕別人在中間涂改(比如古代假傳圣旨,就是沒(méi)有做好身份驗(yàn)證)

你可以用你的私鑰對(duì)通知進(jìn)行加密,其它人想看的話,通過(guò)下載你的公鑰,進(jìn)行解密,能解密出來(lái),說(shuō)明通知一定是你發(fā)的。

因?yàn)槠渌巳绻谥虚g涂改,但是又沒(méi)有你的私鑰重新加密,所以是行不通的。

總結(jié) : 通過(guò)以上的描述,我們解決了好幾個(gè)問(wèn)題,經(jīng)過(guò)了以下幾個(gè)過(guò)程。

小明和小花為了安全的通信,采用加密方式,對(duì)內(nèi)容進(jìn)行加密傳輸

對(duì)比來(lái)對(duì)比去,只能選對(duì)稱(chēng)加密這種加密方式,對(duì)內(nèi)容進(jìn)行加密傳輸

但是對(duì)稱(chēng)加密的密鑰S,傳輸過(guò)程不安全,容易被老王竊取,怎么辦呢

小明想到了非對(duì)稱(chēng)加密方式,于是就生成了一對(duì)私鑰公鑰,并且把公鑰給了小花

小花就用公鑰對(duì)密鑰S進(jìn)行加密,傳給小明

因?yàn)槭怯昧诵∶鞯墓€加密的,又因?yàn)樗借€只有小明自己有,所以,只有小明能解密。 這個(gè)過(guò)程哪怕老王截獲了密文,也解密不了

這樣,小明用自己的私鑰解密出來(lái)了密鑰S

此時(shí) 小明和小花就用對(duì)稱(chēng)加密,密鑰S, 進(jìn)行愉快的通信了,比如商量彩禮給多少,酒席在哪辦,蜜月在哪度

這樣,這個(gè)通信過(guò)程就是安全的了。

上面的過(guò)程很完美,但是道高一尺,魔高一丈啊,老王腦子靈光特別好使啊,又想出來(lái)一招

既然你倆用非對(duì)稱(chēng)加密,我截取到密文也解密不了,那就換個(gè)法子。

如果小花在獲取小明的公鑰的過(guò)程,出了問(wèn)題,比如小花獲取的不是小明的公鑰,而且老王的公鑰呢(此時(shí)小花還以為手里的公鑰是小明的呢)

會(huì)發(fā)生什么?先看一下圖(也就是所謂的中間人攻擊)

1299d254-61c8-11ed-8abf-dac502259ad0.png

根據(jù)上圖,老王,也叫做中間人,上圖就是中間人攻擊,流程如下:

小花在獲取小明公鑰的過(guò)程中,被老王給掉包成了自己的公鑰,發(fā)給了小花

小花誤以為手里的公鑰是小明的 (其實(shí)是老王的公鑰了),所以就用老王的公鑰對(duì)密鑰S進(jìn)行加密,得到密文S0

密文S0發(fā)給小明的過(guò)程中,被老王攔截,老王就用自己的私鑰解密,得到了密鑰S

老王得到密鑰S后,自己備份一份,再把此密鑰S,用小明的公鑰加密,得到密文S1, 發(fā)給小明

小明得到密文S1后,用自己的私鑰解密,得到密鑰S

以后,小明和小花,就用對(duì)稱(chēng)加密方式,密鑰S進(jìn)行通信了

他倆還以為很安全,其實(shí)通信的內(nèi)容早就被老王先看了一遍了。還是不安全

啊啊啊,要瘋了,為了通信安全,我們就加密,但是加密的密鑰傳輸又不安全了

為了密鑰傳輸安全,我們生產(chǎn)了私鑰公鑰對(duì),把公鑰給小花,小花用公鑰對(duì)密鑰加密再傳輸

這樣就只有小明能解密了,沒(méi)曾想,公鑰的傳輸又不安全了。

談個(gè)戀愛(ài)好難啊,老王啊,干的都叫啥事啊。。。

出了問(wèn)題,總得解決啊,現(xiàn)在是傳輸公鑰的過(guò)程,又不安全了

這和上面的問(wèn)題怎么把信件內(nèi)容安全的傳輸給對(duì)方?以及怎么把密鑰安全的傳輸給對(duì)方?是類(lèi)似的

現(xiàn)在這個(gè)問(wèn)題是:怎么把公鑰安全的傳輸給對(duì)方?

感覺(jué)進(jìn)入到了死循環(huán)了,不管是把信件內(nèi)容安全傳輸,還是把密鑰安全傳輸,還是把公鑰安全安全傳輸

本質(zhì)都是類(lèi)似的,只不過(guò)傳輸?shù)臇|西不一樣,采用的方法不一樣

問(wèn)題五: 小明如何安全的把自己的公鑰傳輸給小花

經(jīng)過(guò)上面我們解決的問(wèn)題可以知道

如何安全的把通信內(nèi)容傳輸給對(duì)方?

解決方法:我們用對(duì)稱(chēng)加密的方式進(jìn)行通信

如何安全的把密鑰S安全的傳輸給對(duì)方 ?

解決方法:采用非對(duì)稱(chēng)加密方式,小明把自己的公鑰給小花

小花用小明的公鑰對(duì)密鑰S加密傳給小明,小明用自己的私鑰解密

這個(gè)過(guò)程只有小明能解密,所以是安全的

現(xiàn)在新的問(wèn)題是:公鑰如何安全傳輸給對(duì)方 ?

難道再用對(duì)稱(chēng)或者非對(duì)稱(chēng)加密?都不對(duì)。這樣已經(jīng)行不通了。

想象一下,生活中,我們有個(gè)矛盾,有個(gè)問(wèn)題,我們最相信的是誰(shuí),肯定是政府啊

現(xiàn)在我從小明那下載公鑰已經(jīng)不靠譜了,已經(jīng)不安全了

到底我應(yīng)該相信誰(shuí)呢?到底從誰(shuí)那獲取的公鑰是小明真正的公鑰呢?

所以,我們也搞一個(gè)機(jī)構(gòu),我們大家都相信這個(gè)機(jī)構(gòu),反正我就是無(wú)條件百分百相信這個(gè)機(jī)構(gòu),這是規(guī)定。

我們把這個(gè)機(jī)構(gòu)起一個(gè)名字,叫做CA機(jī)構(gòu)

好了,現(xiàn)在我們把問(wèn)題拋給了 CA 機(jī)構(gòu),小花也好,小麗也好,小美也好,只要獲取小明的公鑰,都從 CA 那里獲取

CA 機(jī)構(gòu)哪來(lái)的小明的公鑰呢? 肯定是小明給的啊,對(duì)于小明來(lái)說(shuō),反正我已經(jīng)把我的公鑰給你 CA 了,你 CA 機(jī)構(gòu)就得保證安全的傳輸給別人

這 CA 也是夠倒霉的,你們搞不定的活,全拋給了我,又不是我和小花談戀愛(ài)。。。

抱怨歸抱怨,CA 是怎么解決的呢?

答案是數(shù)字證書(shū), 怎么又出來(lái)一個(gè)名字,數(shù)字證書(shū)是個(gè)什么鬼,是不是已經(jīng)繞暈了,不要急,這個(gè)時(shí)候暈了,再回過(guò)過(guò)頭再看看前面的寫(xiě)的

多看看幾遍,別忘了,筆者也是看了 N 多遍,自己?jiǎn)栕约簡(jiǎn)栴},自己來(lái)嘗試解決,才搞明白這個(gè)過(guò)程的。

先來(lái)說(shuō)一個(gè)結(jié)論:數(shù)字證書(shū)就是解決公鑰傳輸問(wèn)題的

重要的事件重復(fù)三遍 :數(shù)字證書(shū)就是解決公鑰傳輸問(wèn)題的,數(shù)字證書(shū)就是解決公鑰傳輸問(wèn)題的,數(shù)字證書(shū)就是解決公鑰傳輸問(wèn)題的

在說(shuō)數(shù)字證書(shū)之前,我們先解決這樣一個(gè)問(wèn)題

問(wèn)題六:信件的傳輸過(guò)程中,如何保證內(nèi)容不被篡改,即信息的完整性?

結(jié)合前面學(xué)到的加密知識(shí),我們可以用單向加密算法,我們以 md5 加密算法舉例

小明給小花寫(xiě)完信后,用 md5 對(duì)信件的內(nèi)容作一次加密運(yùn)算,得到一個(gè)唯一的字符串,我們把這個(gè)字符串起個(gè)名,叫做摘要

小明在信件的底部,寫(xiě)上單向加密算法 md5, 以及 md5 對(duì)信件內(nèi)容運(yùn)算出來(lái)的摘要,一塊發(fā)給小花

小花收到信后,看到信件底部是 md5 算法,于是就用 md5 對(duì)信件內(nèi)容進(jìn)行加密算法,得到 新的摘要

小花將 新的摘要 和信件底部附加的 摘要 進(jìn)行對(duì)比,如果相等,說(shuō)明信件沒(méi)有被人改過(guò)

如果不相等,說(shuō)明信件內(nèi)容被別人改過(guò)了。

如下圖表示此過(guò)程。

12b12486-61c8-11ed-8abf-dac502259ad0.png

但就是上面這個(gè)過(guò)程,也是有問(wèn)題的,如果老王又出現(xiàn)了呢

首先老王拿到信了,把信給改了

老王用 md5 算法 ,重新把信件內(nèi)容給 md5 一下,得到新的加密串

老五把新的加密串,放在信件底部,發(fā)給了小花

此時(shí)小花收到信后,是沒(méi)辦法判斷出來(lái),信件是不是被篡改過(guò)的。

如下圖表示:

1314eff2-61c8-11ed-8abf-dac502259ad0.png

所以,單純的使用單向加密算法 ,生成摘要,是不能保證內(nèi)容的完整性的

那么如何才能保證信件的完整性,不被人篡改呢?

答案是,簽名

又出來(lái)一個(gè)名詞,簽名,本文的名詞太多了。

通過(guò)前面學(xué)習(xí),我們知道,非對(duì)稱(chēng)加密,有 2 個(gè)作用,其中一個(gè)就是身份認(rèn)證

還是上面的例子我, 我們改一下:

小明用 md5 對(duì)信件內(nèi)容進(jìn)行運(yùn)算,得到一個(gè)字符串,我們起名叫摘要

小明用自己的私鑰對(duì)摘要進(jìn)行加密運(yùn)算,得到另一個(gè)字符串,我們起名叫簽名

將 md5, 摘要, 簽名一塊發(fā)給小花

小花用小明的公鑰對(duì)簽名進(jìn)行解密,到得信件摘要,假如為 d1

小花用 md5 對(duì)信件內(nèi)容進(jìn)行運(yùn)算,得到信件摘要,假如為 d2

對(duì)比 d1 和 d2 是否相等,相等說(shuō)明信件內(nèi)容沒(méi)有被篡改過(guò)

d1 和 d2 不相等,說(shuō)明信件內(nèi)容被篡改過(guò)。

此時(shí),這個(gè)過(guò)程就是安全的了

如果老王再次截取了信件,老王可以修改信件內(nèi)容,再次用 md5 算出一個(gè)新的摘要出來(lái)

但是簽名,老王是修改不了的。因?yàn)楹灻怯玫男∶鞯乃借€加密的,就算老王能解密出來(lái)

老王是沒(méi)有辦法生成新的簽名的,因?yàn)樾∶鞯乃借€只有小明自己有。

而且小花收到信后,是用小明的公鑰進(jìn)行對(duì)簽名解密的,老王假如用自己的私鑰對(duì)摘要進(jìn)行加密生成新的簽名

小花用小明的公鑰是解密不了的。

此時(shí)再來(lái)進(jìn)行一時(shí)概念的定義

摘要:md5(或者其它單向加密算法),對(duì)內(nèi)容進(jìn)行加密出來(lái)的字符串,就叫做摘要

簽名:小明用私鑰對(duì)摘要進(jìn)行加密,加密出來(lái)簽字串,就叫做簽名

驗(yàn)簽:小花用小明的公鑰,對(duì)簽名進(jìn)行解密操作,解密出來(lái)的摘要和原來(lái)的對(duì)比,就叫做驗(yàn)簽

問(wèn)題七:數(shù)字證書(shū)是怎么由來(lái)的?

數(shù)字證書(shū)是由 CA 機(jī)構(gòu)頒發(fā)的,首先小明如果想要有一個(gè)數(shù)字證書(shū),就需要向 CA 機(jī)構(gòu)申請(qǐng)

CA 機(jī)構(gòu)就會(huì)給小明頒發(fā)一張數(shù)字證書(shū),里面包含了

公鑰:小明的公鑰

頒發(fā)者:CA(證書(shū)認(rèn)證機(jī)構(gòu))

有效期:證書(shū)的使用期限

摘要算法:指定的摘要算法,用來(lái)計(jì)算證書(shū)的摘要

指紋:也就是證書(shū)的摘要,保證證書(shū)的完整性

簽名算法:用于生成簽名,確保證書(shū)是由 CA 簽發(fā)

序列號(hào):證書(shū)的唯一標(biāo)識(shí)

知道了證書(shū)里面包含的內(nèi)容,我們了解一下證書(shū)是如何產(chǎn)生的?

將小明的公鑰,頒發(fā)者,有效期,摘要算法 ,哈希算法寫(xiě)入證書(shū)

CA 根據(jù)證書(shū)中的指定的哈希算法,計(jì)算出整個(gè)證書(shū)的摘要,即 digest

CA 根據(jù)簽名算法以及上一步計(jì)算出來(lái)的摘要,CA用自己的私鑰對(duì)摘要進(jìn)行加密,生成 CA 的簽名,即 signature

最后把摘要,簽名以及證書(shū)的基本信息,一起發(fā)布,就得到了小明的證書(shū)

問(wèn)題八: 數(shù)字證書(shū)的作用

從上面我們知道,數(shù)字證書(shū)就是解決公鑰傳輸問(wèn)題的,同時(shí)我們也知道,數(shù)字證書(shū)就是一個(gè)文件

既然數(shù)字證書(shū)是用來(lái)解決公鑰的安全傳輸?shù)?,那么到底如何解決傳輸問(wèn)題的呢

現(xiàn)在小明有了自己的證書(shū)了,我們就不會(huì)公開(kāi)傳輸公鑰了,只需要傳輸證書(shū)就行了

那么,小明和小花現(xiàn)在需要安全的通信,那么流程是怎么樣的呢?如下

小明把自己的數(shù)字證書(shū)發(fā)送給小花

擔(dān)心證書(shū)被老王掉包,小花需要對(duì)證書(shū)進(jìn)行驗(yàn)證,驗(yàn)證什么呢?

其實(shí)就是驗(yàn)證此數(shù)字到底是不是 CA 機(jī)構(gòu)頒發(fā)的,不是 CA 機(jī)構(gòu)頒發(fā)的證書(shū),我們就認(rèn)為傳輸是不安全的。

驗(yàn)證數(shù)字證書(shū)是不是 CA 頒發(fā)的,需要有CA的公鑰。。。(為啥需要 CA 的公鑰啊,因?yàn)樽C書(shū)上的簽名,是 CA 的私鑰加密的啊,只有 CA 的公鑰才能解密啊)

啊啊啊,受不了啦,搞了半天怎么又需要公鑰,我們講了半天的數(shù)字證書(shū),就是為了傳輸公鑰的

所以,換成下面的描述會(huì)好點(diǎn)

驗(yàn)證數(shù)字證書(shū)是不是 CA 頻發(fā)的,需要 CA 的數(shù)字證書(shū)(因?yàn)槔锩嬗?CA 的公鑰)

那我們?nèi)ツ睦镎?CA 的數(shù)字證書(shū)呢?從上面的描述,我們知道了,需要一個(gè)數(shù)字證書(shū),就向 CA 申請(qǐng),CA 給我們頒發(fā)。

那么 CA 機(jī)構(gòu)自己的數(shù)字證書(shū)哪來(lái)的呢?答案是也是自己給自己頒發(fā)的,那么我們從哪里獲取呢?

如果從網(wǎng)上,或者從其它服務(wù)器下載,又有可能會(huì)被掉包,又不安全了。

這真的是個(gè)傷心的故事,但是今天兔哥非要把這個(gè)故事講完。

從網(wǎng)上下載或者從其它服務(wù)器下載數(shù)字證書(shū),都不安全的,那么怎么樣才是安全的呢?

答案就是:你的電腦安裝操作系統(tǒng)的時(shí)候,操作系統(tǒng)里面,就已經(jīng)內(nèi)置了非常多的 CA 機(jī)構(gòu)的數(shù)字證書(shū)了

也就說(shuō),只要你安裝了操作系統(tǒng),不管是 windows, linux, 或者 mac , 或者你剛買(mǎi)的電腦,里面都已經(jīng)有了 CA 機(jī)構(gòu)的數(shù)字證書(shū)了

這個(gè)是可以相信的,是真的 CA 機(jī)構(gòu)的數(shù)字證書(shū),不會(huì)有假。(除非你安裝的是盜版的操作系統(tǒng),所以我們盡量用正版操作系統(tǒng))

上面的過(guò)程真的是復(fù)雜啊,兔哥也是花了很久才搞明白的,知道這塊面試會(huì)坑很多人,其實(shí)https過(guò)程不知道,也沒(méi)啥關(guān)系

也不影響你寫(xiě)代碼,但是那些面試官就死愛(ài)問(wèn)這塊,好像他們能搞懂這個(gè)過(guò)程很了不起似的,你問(wèn)點(diǎn)設(shè)計(jì)模式它不香嘛。

不過(guò)話說(shuō)回來(lái),兔哥在寫(xiě)自己的HelloWorld 技術(shù)社區(qū)的時(shí)候,配置https,數(shù)字證書(shū),不懂這些,還真的不好搞啊

寫(xiě)文章不容易,尤其是寫(xiě)這篇文章,為了寫(xiě)的更容易懂點(diǎn),花了不少精力,能看到這塊的,幫忙給個(gè)關(guān)注吧

尤其是幫忙宣傳一下兔哥的HelloWorld 技術(shù)社區(qū), 同一個(gè)世界,同一行代碼,我們的域名是: www.helloworld.net

我們的電腦,天生就有 CA 的數(shù)字證書(shū),而且是真的。天生的。上天定的,上天最大

那么我們就可以對(duì)數(shù)字證書(shū)進(jìn)行辨別真?zhèn)瘟恕?/p>

問(wèn)題九:對(duì)數(shù)字證書(shū)的驗(yàn)證

從上面可以知道:

小花收到了小明的數(shù)字證書(shū),首先要對(duì)數(shù)字證書(shū)進(jìn)行驗(yàn)證,就是驗(yàn)證此數(shù)字證書(shū)是不是 CA 頒發(fā)的

因?yàn)槲覀儾僮飨到y(tǒng)里面內(nèi)置了所有 CA 機(jī)構(gòu)的數(shù)字證書(shū),所以,我們就可以對(duì)數(shù)字證書(shū)進(jìn)行驗(yàn)證

在說(shuō)流程之前,先來(lái)簡(jiǎn)單的復(fù)習(xí)一下前面的,摘要和簽名怎么來(lái)的

摘要 = md5 (證書(shū)內(nèi)容) :?jiǎn)蜗蚣用芩惴?,比?md5,對(duì)證書(shū)整個(gè)內(nèi)容進(jìn)行加密,得到摘要,也叫做證書(shū)的指紋

簽名 = privateKey (摘要) : 私鑰對(duì)上一步摘要加密,產(chǎn)生簽名

數(shù)字證書(shū)的驗(yàn)證流程如下:

小花用內(nèi)置的 CA 的數(shù)字證書(shū),得到 CA 的公鑰

小明發(fā)過(guò)來(lái)的數(shù)字證書(shū),我們假如叫做 C , 小花用 CA 的公鑰對(duì) C 證書(shū)里面的簽名進(jìn)行解密,得到摘要 D

小花根據(jù) C 證書(shū)里面的摘要算法,假如是 md5,小花用 md5 對(duì)證書(shū)整個(gè)內(nèi)容進(jìn)行計(jì)算,得到摘要 D1

小花對(duì)比摘要 D 和摘要 D1 是否相等

如果 D == D1 ,那么說(shuō)明此證書(shū)就是 CA 頒發(fā)的

如果 D != D1 , 那么說(shuō)明此證書(shū)不是 CA 頒發(fā)的,是有風(fēng)險(xiǎn)的,不安全的

假如證書(shū)驗(yàn)證通過(guò),就說(shuō)明此證書(shū)的確是 CA 頒發(fā)的,此時(shí)小花就可以從數(shù)字證書(shū)中拿到小明的公鑰了

因?yàn)樾∶髟谏暾?qǐng)數(shù)字證書(shū)時(shí),數(shù)字證書(shū)中所有者是小明,CA 是會(huì)驗(yàn)證小明的身份的,所以數(shù)字證書(shū)中小明的公鑰是真實(shí)的

由至此,我們總算完成了一件事:小明正確的把自己的公鑰安全的傳輸給了小花

這件事的成立 ,接下來(lái)我們的工作就好做多了。接下來(lái),我們看一下具體的傳輸過(guò)程

問(wèn)題十 : 完整的傳輸過(guò)程

下面我們看一下小明再次給小花通信,就和前面的不一樣了,我們來(lái)看下:

小明把寫(xiě)完的信,在信的底部,附加上摘要算法,假如是 MD5, 以及通過(guò) MD5 算出來(lái)的摘要

小明用自己的私鑰,對(duì)上一步的摘要進(jìn)行加密,得到簽名

小明把摘要算法,摘要,簽名都附加到信件底部以后,再把自己的數(shù)字證書(shū),一起發(fā)送給小花

小花收到信后,首先用自己的 CA 數(shù)字證書(shū),拿到 CA 公鑰,再用 CA 公鑰對(duì)數(shù)字證書(shū)進(jìn)行驗(yàn)證(也就是上面我們講的流程)

數(shù)字證書(shū)驗(yàn)證通過(guò)后,說(shuō)明證書(shū)就是 CA 頒發(fā)的,沒(méi)有被篡改

小花就從證書(shū)中拿到了小明的公鑰

有了小明的公鑰,接下來(lái)的過(guò)程,就是對(duì)信件內(nèi)容進(jìn)行驗(yàn)證了

對(duì)信件內(nèi)容的驗(yàn)證流程如下(前面其實(shí)我們講過(guò))

小花用小明的公鑰,對(duì)信件的簽名進(jìn)行解密,得到信件的摘要 D1

小花用摘要算法,對(duì)信件進(jìn)行運(yùn)算,得到信件的摘要 D2

小花對(duì)比 D1 是否等于 D2

如果不相等,說(shuō)明信件被人篡改過(guò),不安全

如果相等,說(shuō)明,信件內(nèi)容沒(méi)有被篡改過(guò)

相等的情況,小花就拿到了信件的內(nèi)容

總結(jié):

以上所有的內(nèi)容,是數(shù)字證書(shū),加密解密,簽名,驗(yàn)簽的過(guò)程,還沒(méi)有正式講https的過(guò)程呢。

有了以上的知識(shí),我們講起來(lái) https 就容易的多了。下面我們看一張圖

133bbff6-61c8-11ed-8abf-dac502259ad0.png

我們以訪問(wèn)www.helloworld.net網(wǎng)站為例,講解 https 的過(guò)程

此過(guò)程分為 3 個(gè)階段,我們?cè)谙旅婷枋龃?3 個(gè)階段

訪問(wèn)www.helloworld.net的過(guò)程階段如下

網(wǎng)站申請(qǐng)證書(shū)階段

網(wǎng)站向 CA 機(jī)構(gòu)申請(qǐng)數(shù)字證書(shū)(需要提交一些材料,比如域名)

CA 向證書(shū)中寫(xiě)入摘要算法,域名,網(wǎng)站的公鑰等重要信息

CA 根據(jù)證書(shū)中寫(xiě)入的摘要算法,計(jì)算出證書(shū)的摘要

CA 用自己的私鑰對(duì)摘要進(jìn)行加密,計(jì)算出簽名

CA 生成一張數(shù)字證書(shū),頒發(fā)給了www.helloworld.net

網(wǎng)站的管理員,把證書(shū)放在自己的服務(wù)器上

瀏覽器驗(yàn)證證書(shū)階段

瀏覽器在地址欄中輸入https://www.helloworld.net,并回車(chē)

服務(wù)器將數(shù)字證書(shū)發(fā)送給瀏覽器

瀏覽器用操作系統(tǒng)內(nèi)置的 CA 的數(shù)字證書(shū),拿到 CA 的公鑰

瀏覽器用 CA 公鑰對(duì) www.helloworld.net 的數(shù)字證書(shū)進(jìn)行驗(yàn)簽

具體就是,瀏覽器用 CA 公鑰,對(duì) helloworld 的數(shù)字證書(shū)中的簽名進(jìn)行解密,得到摘要 D1

瀏覽器根據(jù) helloworld 數(shù)字證書(shū)中的摘要算法,計(jì)算出證書(shū)的摘要 D2

對(duì)比 D1 和 D2 是否相等。

如果不相等,說(shuō)明證書(shū)被掉包了

如果相等,說(shuō)明證書(shū)驗(yàn)證通過(guò)了。

協(xié)商對(duì)稱(chēng)加密密鑰階段

瀏覽器驗(yàn)證數(shù)字證書(shū)通過(guò)以后

瀏覽器拿到數(shù)字證書(shū)中的公鑰,也就是www.helloworld.net網(wǎng)站的公鑰

瀏覽器有了網(wǎng)站的公鑰后,就用公鑰進(jìn)行對(duì)密鑰S進(jìn)行加密,加密以后的密文發(fā)送給服務(wù)器

服務(wù)器收到密文后,用自己的私鑰進(jìn)行解密,得到密鑰S

此后瀏覽器,服務(wù)器雙方就用密鑰S進(jìn)行對(duì)稱(chēng)加密的通信了。

終止所述,終于講完了,花了整整一天的時(shí)間

過(guò)程那么多,其實(shí)抓住幾個(gè)關(guān)鍵的問(wèn)題是很簡(jiǎn)單的,本質(zhì)上還是兩個(gè)人,如何安全高效的進(jìn)行通信

我們?cè)俅魏?jiǎn)單的總結(jié)一下,采用一問(wèn)一答的方式,我覺(jué)得比較好

問(wèn)題一:小明和小花安全的通信,怎么做?

答:通過(guò)加密

問(wèn)題二:通過(guò)哪種加密方式通信,更高效?

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

因?yàn)?,單向加密,沒(méi)辦法解密,不行

非對(duì)稱(chēng)加密,太慢,也不行

只有對(duì)稱(chēng)加密,速度快

問(wèn)題三:采用對(duì)稱(chēng)加密,密鑰 S 怎么安全傳輸?

答:小花使用小明的公鑰,對(duì)密鑰S進(jìn)行加密,傳給小明

小明用自己的私鑰解密

問(wèn)題四:小明如何安全的把自己的公鑰傳輸給小花?

答:使用數(shù)字證書(shū)

具體就是 小明向 CA 申請(qǐng)一個(gè)自己的數(shù)字證書(shū),把自己的公鑰放在證書(shū)中

小明將數(shù)字證書(shū)發(fā)送給小花

問(wèn)題五:小花如何驗(yàn)證數(shù)字證書(shū)的真實(shí)性?

答:小花用操作系統(tǒng)內(nèi)置的 CA 的數(shù)字證書(shū),拿到 CA 的公鑰,用 CA 的公鑰,對(duì)數(shù)字證書(shū)進(jìn)行驗(yàn)簽

驗(yàn)簽通過(guò),說(shuō)明數(shù)字證書(shū)是真的。

以上幾個(gè)問(wèn)題,希望讀者多問(wèn)問(wèn)自己,如果是自己,應(yīng)該怎么解決這個(gè)問(wèn)題。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AES
    AES
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    33168
  • SHA
    SHA
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8428
  • 加解密
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    6507
  • https
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    6072

原文標(biāo)題:通俗大白話,徹底弄懂https原理本質(zhì)

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電子DIY過(guò)程詳解

    電子DIY過(guò)程詳解.pdf
    發(fā)表于 08-05 11:58

    vison assistant中的圖像處理過(guò)程

    新手求教!在vision assistant中驗(yàn)證圖片時(shí)在圖像處理畫(huà)面可以看到圖像的處理過(guò)程,但完成退回到labview中后,為什么在顯示的 圖片中看不到處理過(guò)程呢?
    發(fā)表于 06-24 15:55

    HiveSQL實(shí)現(xiàn)過(guò)程的原理詳解

    HiveSQL解析過(guò)程詳解
    發(fā)表于 06-04 16:27

    51單片機(jī)中斷處理過(guò)程有幾個(gè)

    51單片機(jī)中斷處理過(guò)程有幾個(gè),中斷是單片機(jī)的一個(gè)重要功能,本文我們就對(duì)51單片機(jī)的中斷進(jìn)行介紹。所謂“中斷”,通俗一點(diǎn)講,就是單片機(jī)停止正在執(zhí)行的任務(wù),轉(zhuǎn)去執(zhí)行其它的急需解決的任務(wù),當(dāng)這個(gè)任務(wù)完成
    發(fā)表于 07-14 07:33

    單片機(jī)中斷的處理過(guò)程是怎樣進(jìn)行的?

    單片機(jī)中斷系統(tǒng)的優(yōu)點(diǎn)是什么?單片機(jī)中斷的處理過(guò)程是怎樣進(jìn)行的?
    發(fā)表于 09-23 06:57

    CPU的內(nèi)部處理過(guò)程是怎樣的

    CPU是什么?CPU主要由哪幾部分構(gòu)成?CPU的內(nèi)部處理過(guò)程是怎樣的?
    發(fā)表于 10-19 09:21

    單片機(jī)中斷的作用是什么?處理過(guò)程是怎樣的?

    單片機(jī)中斷的作用是什么?處理過(guò)程是怎樣的?
    發(fā)表于 11-01 07:07

    污水處理過(guò)程儀表技術(shù)的研究現(xiàn)狀

    污水處理過(guò)程固有的非線性、時(shí)變性特征對(duì)傳感器的可靠性、適應(yīng)性提出了很高的要求。污水處理過(guò)程涉及多種傳感器,多數(shù)傳感器是污水處理過(guò)程所特有的,分別為人們提供所監(jiān)
    發(fā)表于 12-20 15:11 ?10次下載

    污水處理過(guò)程儀表技術(shù)的研究現(xiàn)狀

    污水處理過(guò)程固有的非線性、時(shí)變性特征對(duì)傳感器的可靠性、適應(yīng)性提出了很高的要求。污水處理過(guò)程涉及多種傳感器,多數(shù)傳感器是污水處理過(guò)程所特有的,分別為人們提供所監(jiān)
    發(fā)表于 01-07 15:39 ?15次下載

    數(shù)字電視的典型的處理過(guò)程

    典型的處理過(guò)程 下面介紹數(shù)字電視的幾個(gè)典型的處理過(guò)程
    發(fā)表于 07-31 14:23 ?1471次閱讀
    數(shù)字電視的典型的處<b class='flag-5'>理過(guò)程</b>

    污水處理過(guò)程中DO的模糊神經(jīng)網(wǎng)絡(luò)控制

    本內(nèi)容詳細(xì)介紹了污水處理過(guò)程中DO的模糊神經(jīng)網(wǎng)絡(luò)控制
    發(fā)表于 09-21 17:05 ?25次下載
    污水處<b class='flag-5'>理過(guò)程</b>中DO的模糊神經(jīng)網(wǎng)絡(luò)控制

    淺析單片機(jī)中斷處理過(guò)程

    中斷處理過(guò)程可分為中斷響應(yīng)、中斷處理和中斷返回三個(gè)階段。
    的頭像 發(fā)表于 11-06 14:31 ?1.7w次閱讀
    淺析單片機(jī)中斷處<b class='flag-5'>理過(guò)程</b>

    PCB前處理過(guò)程中有什么問(wèn)題

    PCB前處理過(guò)程很大程度上影響到制程程序中進(jìn)展順利情況與制程的優(yōu)劣
    的頭像 發(fā)表于 04-10 17:47 ?2713次閱讀

    Vulkan圖形處理過(guò)程中遇到的問(wèn)題

    在本篇文章中,我們將提到Vulkan 圖形處理過(guò)程中夾雜計(jì)算任務(wù)時(shí)遇到的各式問(wèn)題。為更準(zhǔn)確地了解我們的話題,可查看文章第一部分。
    的頭像 發(fā)表于 09-04 11:45 ?2380次閱讀

    RL78啟動(dòng)過(guò)程詳解

    RL78啟動(dòng)過(guò)程詳解
    的頭像 發(fā)表于 09-28 16:39 ?1303次閱讀
    RL78啟動(dòng)<b class='flag-5'>過(guò)程</b><b class='flag-5'>詳解</b>