ssl協(xié)議數(shù)據(jù)加密詳解,http和https協(xié)議的區(qū)別。

????????本文主要講述SSL協(xié)議中數(shù)據(jù)加密的過(guò)程,對(duì)稱加密、非對(duì)稱加密、SSL握手過(guò)程和數(shù)字證書(shū)等概念,最后總結(jié)下http和https協(xié)議的區(qū)別。

1、SSL

????????只要你聽(tīng)過(guò)HTTPS,不可能沒(méi)聽(tīng)過(guò)SSL協(xié)議吧,SSL協(xié)議是一種安全協(xié)議。HTTPS之所以安全就是因?yàn)榧映至薙SL這個(gè)外掛來(lái)對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密,那么具體的加密方法又是什么呢?

請(qǐng)聽(tīng)我娓娓道來(lái)。先看下面兩個(gè)概念:

對(duì)稱加密

非對(duì)稱加密

你知道上面兩個(gè)概念是什么意思么??

OK,不管你懂不懂,我先用我的方式來(lái)給你解釋下:

親,你作過(guò)弊么??不要告訴我在你漫長(zhǎng)的學(xué)生生涯里你沒(méi)作過(guò)弊(那你的學(xué)生生涯得多枯燥),作弊我們常用的方法是啥?(說(shuō)把答案寫(xiě)在胳膊大腿紙條上的同學(xué)請(qǐng)你出去,謝謝?) 當(dāng)然是加密了!比如我出于人道主義,想要幫助小明同學(xué)作弊,首先考試前我們會(huì)約定好一個(gè)暗號(hào)來(lái)傳遞選擇題的答案,摸頭發(fā)——A,摸耳朵——B,咳嗽——C,跺腳——D,于是一個(gè)加密方法就誕生了。

這個(gè)加密方法只有我和小明知道,老師雖然看我抓耳撓腮但他頂多把我當(dāng)成神經(jīng)病,并沒(méi)有直接證據(jù)說(shuō)我作弊。好,這種我和小明知道,別人不知道的加密方法就是一種對(duì)稱加密算法,對(duì)稱加密算法也是我們?nèi)粘W畛R?jiàn)的加密算法。這種算法只有一把鑰匙,加密解密都用同一把鑰匙,一旦鑰匙泄露就全玩完了。

隨時(shí)時(shí)代的進(jìn)步,人們發(fā)現(xiàn)實(shí)際上加密和解密不用同一把鑰匙也是可以的,只要加密和解密的兩把鑰匙存在某種關(guān)系就行了。

于是,層出不窮的非對(duì)稱加密算法就被研究了出來(lái),那么它基于什么樣的道理呢?請(qǐng)嚴(yán)格記住下面這句話:

將a和b相乘得出乘積c很容易,但要是想要通過(guò)乘積c推導(dǎo)出a和b極難。即對(duì)一個(gè)大數(shù)進(jìn)行因式分解極難。

聽(tīng)不懂因式分解的童鞋先去面壁5分鐘,這么多年數(shù)學(xué)白學(xué)了?甩給你維基百科鏈接,自行補(bǔ)課:因式分解

好的,我們繼續(xù),非對(duì)稱加密算法就多了兩個(gè)概念——公鑰c和私鑰b。

用法如下:公鑰加密的密文只能用私鑰解密,私鑰加密的密文只能用公鑰解密。

公鑰我們可以隨便公開(kāi),因?yàn)閯e人知道了公鑰毫無(wú)用處,經(jīng)過(guò)公鑰加密后的密文只能通過(guò)私鑰來(lái)解密。而想要通過(guò)公鑰推導(dǎo)出a和b極難。但很明顯的是,使用非對(duì)稱加密效率不如對(duì)稱加密,因?yàn)榉菍?duì)稱加密需要有計(jì)算兩個(gè)密鑰的過(guò)程。

我們通過(guò)密碼學(xué)中的兩個(gè)典型的愛(ài)麗絲和鮑勃人物來(lái)解釋這個(gè)非對(duì)稱加密算法的過(guò)程:

客戶端叫做愛(ài)麗絲,服務(wù)器叫做鮑勃。

愛(ài)麗絲: 鮑勃我要給你發(fā)送一段消息,把你的公鑰給我吧;

鮑勃: OK,這是我的公鑰:234nkjdfdhjbg324**;

愛(ài)麗絲:收到公鑰,我給你發(fā)送的消息經(jīng)過(guò)公鑰加密之后是這樣的:###@#@!$%*(@;

鮑勃:好的,收到了,親,我來(lái)用我的私鑰解密看下你真正要給我發(fā)送的內(nèi)容;

上述過(guò)程就是一個(gè)非對(duì)稱加密的過(guò)程,這個(gè)過(guò)程安全么?好像是很安全,即使查理(通信中的第三位參加者)截取了密文和公鑰沒(méi)有私鑰還是沒(méi)法得到明文。

可如果第三者查理發(fā)送給愛(ài)麗絲他自己的公鑰,然后愛(ài)麗絲用查理給的公鑰加密密文發(fā)送了出去,查理再通過(guò)自己的私鑰解密,這不就泄露信息了么?我們需要想個(gè)辦法讓愛(ài)麗絲判斷這個(gè)公鑰到底是不是鮑勃發(fā)來(lái)的。于是就有了數(shù)字證書(shū)的概念。

2、數(shù)字證書(shū)

????????數(shù)字證書(shū)就是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一串?dāng)?shù)字,提供了一種在Internet上驗(yàn)證通信實(shí)體身份的方式,數(shù)字證書(shū)不是數(shù)字身份證,而是身份認(rèn)證機(jī)構(gòu)蓋在數(shù)字身份證上的一個(gè)章或?。ɑ蛘哒f(shuō)加在數(shù)字身份證上的一個(gè)簽名)。

上面官方的解釋看起來(lái)就頭大。其實(shí)它就是一段信息。

數(shù)字證書(shū)內(nèi)容大體如下:

1、簽發(fā)證書(shū)的機(jī)構(gòu)

2、鮑勃的加密算法

3、鮑勃所使用的Hash算法

4、鮑勃的公鑰

5、證書(shū)到期時(shí)間

等等

數(shù)字證書(shū)是由權(quán)威機(jī)構(gòu)——CA機(jī)構(gòu)統(tǒng)一來(lái)進(jìn)行發(fā)行,我們絕對(duì)信任這個(gè)機(jī)構(gòu),至于CA機(jī)構(gòu)的安全性…反正99.99%之下都是安全的。

為了防止中間有人對(duì)證書(shū)內(nèi)容進(jìn)行更改,有了一個(gè)數(shù)字簽名的概念,所謂的數(shù)字簽名就是把以上所有的內(nèi)容做一個(gè)Hash操作,得到一個(gè)固定長(zhǎng)度然后再傳給鮑勃。然而如果別人截取了這個(gè)證書(shū)然后更改內(nèi)容,同時(shí)生成了新的Hash值那怎么辦?處于這個(gè)考慮,CA機(jī)構(gòu)在頒發(fā)這個(gè)證書(shū)的時(shí)候會(huì)用自己的私鑰將Hash值加密,從而防止了數(shù)字證書(shū)被篡改。

好,我們來(lái)梳理下整個(gè)過(guò)程:

第一步:首先,當(dāng)愛(ài)麗絲開(kāi)啟一個(gè)新的瀏覽器第一次去訪問(wèn)鮑勃的時(shí)候,會(huì)先讓愛(ài)麗絲安裝一個(gè)數(shù)字證書(shū),這個(gè)數(shù)字證書(shū)里包含的主要信息就是CA機(jī)構(gòu)的公鑰。

第二步:鮑勃發(fā)送來(lái)了CA機(jī)構(gòu)頒發(fā)給自己的數(shù)字證書(shū),愛(ài)麗絲通過(guò)第一步中已經(jīng)得到的公鑰解密CA用私鑰加密的Hash-a(這個(gè)過(guò)程就是非對(duì)稱加密),然后再用傳遞過(guò)來(lái)的HASH算法生成一個(gè)Hash-b,如果Hash-a === Hash-b就說(shuō)明認(rèn)證通過(guò),確實(shí)是鮑勃發(fā)過(guò)來(lái)的。

如上,是整個(gè)數(shù)字證書(shū)的使用過(guò)程就是這樣的。

多說(shuō)一句,非對(duì)稱加密實(shí)際應(yīng)用的例子除了SSL還有很多,比如SSH、電子簽名等;

如上提到的,非對(duì)稱加密計(jì)算量很大,效率不如對(duì)稱加密,我們打開(kāi)網(wǎng)頁(yè)最注重的是啥?是速度!是速度!是速度!

這點(diǎn)SSL就玩的很巧妙了,通信雙方通過(guò)對(duì)稱加密來(lái)加密密文,然后使用非對(duì)稱加密的方式來(lái)傳遞對(duì)稱加密所使用的密鑰。這樣效率和安全就都能保證了。

3、SSL協(xié)議的握手過(guò)程

先用語(yǔ)言來(lái)闡述下:

第一步:愛(ài)麗絲給出支持SSL協(xié)議版本號(hào),一個(gè)客戶端隨機(jī)數(shù)(Client random,請(qǐng)注意這是第一個(gè)隨機(jī)數(shù)),客戶端支持的加密方法等信息;

第二步:鮑勃收到信息后,確認(rèn)雙方使用的加密方法,并返回?cái)?shù)字證書(shū),一個(gè)服務(wù)器生成的隨機(jī)數(shù)(Server random,注意這是第二個(gè)隨機(jī)數(shù))等信息;

第三步:愛(ài)麗絲確認(rèn)數(shù)字證書(shū)的有效性,然后生成一個(gè)新的隨機(jī)數(shù)(Premaster secret),然后使用數(shù)字證書(shū)中的公鑰,加密這個(gè)隨機(jī)數(shù),發(fā)給鮑勃。

第四步:鮑勃使用自己的私鑰,獲取愛(ài)麗絲發(fā)來(lái)的隨機(jī)數(shù)(即Premaster secret);(第三、四步就是非對(duì)稱加密的過(guò)程了)

第五步:愛(ài)麗絲和鮑勃通過(guò)約定的加密方法(通常是AES算法),使用前面三個(gè)隨機(jī)數(shù),生成對(duì)話密鑰,用來(lái)加密接下來(lái)的通信內(nèi)容;

俗話說(shuō)一圖勝千言,我畫(huà)了一個(gè)圖來(lái)說(shuō)明這個(gè)過(guò)程:

OK,整個(gè)進(jìn)行數(shù)據(jù)加密的過(guò)程結(jié)束。我們?cè)賮?lái)回憶下內(nèi)容:

CA機(jī)構(gòu)頒發(fā)數(shù)字證書(shū)給鮑勃;

愛(ài)麗絲和鮑勃進(jìn)行SSL握手,愛(ài)麗絲通過(guò)數(shù)字證書(shū)確定鮑勃的身份;

愛(ài)麗絲和鮑勃傳遞三個(gè)隨機(jī)數(shù),第三個(gè)隨機(jī)數(shù)通過(guò)非對(duì)稱加密算法進(jìn)行傳遞;

愛(ài)麗絲和鮑勃通過(guò)一個(gè)對(duì)稱加密算法生成一個(gè)對(duì)話密鑰,加密接下來(lái)的通信內(nèi)容。

原文鏈接:http://t.cn/RHuMxI7

Http和Https的區(qū)別如下:

https協(xié)議需要到CA申請(qǐng)證書(shū),大多數(shù)情況下需要一定費(fèi)用;

Http是超文本傳輸協(xié)議,信息采用明文傳輸,Https則是具有安全性SSL加密傳輸協(xié)議;

Http和Https端口號(hào)不一樣,Http是80端口,Https是443端口;

Http連接是無(wú)狀態(tài)的,而Https采用Http+SSL構(gòu)建可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,更安全。

Http協(xié)議建立連接的過(guò)程比Https協(xié)議快。因?yàn)镠ttps除了Tcp三次握手,還要經(jīng)過(guò)SSL握手。連接建立之后數(shù)據(jù)傳輸速度,二者無(wú)明顯區(qū)別。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容