http://www.52im.net/thread-219-1-1.html
1. 通訊安全概述
1引言
平時(shí)開發(fā)工作中,我們會(huì)經(jīng)常接觸加密、解密的技術(shù)。尤其在今天移動(dòng)互聯(lián)網(wǎng)時(shí)代,越來越多的用戶會(huì)將數(shù)據(jù)存儲(chǔ)在云端,或使用在線的服務(wù)處理信息。這些數(shù)據(jù)有些涉及用戶的隱私,有些涉及用戶的財(cái)產(chǎn),要是沒有一套的方案來解決用戶的數(shù)據(jù)安全問題的話,這將是一個(gè)多么可怕的事兒。
同時(shí),我們作為開發(fā)者,也會(huì)經(jīng)常遇到用戶對(duì)數(shù)據(jù)安全的需求,當(dāng)我們碰到了這些需求后如何解決,如何何種方式保證數(shù)據(jù)安全,哪種方式最有效,這些問題經(jīng)常困惑著我們。即時(shí)通訊網(wǎng)(52im.net)本次著重整理了常見的通訊安全問題和加解密算法知識(shí)與即時(shí)通訊(IM)開發(fā)同行們一起分享和學(xué)習(xí)。
2安全性威脅
一般的,我們?cè)诰W(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù),都可以認(rèn)為是存在這潛在的風(fēng)險(xiǎn)的。用一句話來概括就是:“任何在網(wǎng)絡(luò)中傳輸?shù)拿魑臄?shù)據(jù)都存在安全性威脅?!?br>
下面就列舉下我們通信中面臨的四種威脅:-
第一,中斷。攻擊者有意破壞和切斷他人在網(wǎng)絡(luò)上的通信,這是對(duì)可用性的攻擊。
-
第二,截獲。屬于被動(dòng)攻擊,攻擊者從網(wǎng)絡(luò)上qie聽他人的通信內(nèi)容,破壞信息的機(jī)密性。
-
第三,篡改。攻擊者故意篡改網(wǎng)絡(luò)上傳送的報(bào)文,這是對(duì)完整性的攻擊。
-
第四,偽造。攻擊者偽造信息在網(wǎng)絡(luò)傳送,這是對(duì)真實(shí)性的攻擊。
3加密解密算法
我們經(jīng)常說加密解密算法是數(shù)據(jù)安全領(lǐng)域里的“劍”,是一種主動(dòng)的防護(hù),對(duì)數(shù)據(jù)進(jìn)行必要的加密處理,以保證其在數(shù)據(jù)傳輸、存儲(chǔ)中的安全。
2. Base64算法介紹
1原理
嚴(yán)謹(jǐn)?shù)恼f,base64并不是加密算法,這里提到他是因?yàn)樗膶?shí)現(xiàn)比較簡(jiǎn)單,通過他的實(shí)現(xiàn),我們可以更好的理解加密解密的過程。
下面看下他是如何“加密”的。假設(shè)我們要對(duì)“BC”字符串進(jìn)行加密?,F(xiàn)將其轉(zhuǎn)換為二進(jìn)制表達(dá)方式,并連起來:01000010 01000011,接下來對(duì)二進(jìn)制按6位分組,不夠6位補(bǔ)0,得到010000、100100、001100(最后兩位補(bǔ)0)。下面查表,找到對(duì)應(yīng)的值“QKM”。那么“QKM”就是“BC”用base64“加密”后的值了。
從上面的base64算法,我們可以窺視部分加密的本質(zhì):將一段有意義的信息,通過某種方式,映射為一段看不懂的信息。使用函數(shù)表達(dá)即為:
1 | public Ciphertext encrypted(Plaintext text);
|
值得注意的是,base64里有一張映射表,如果改變映射表的順序,最終得到的結(jié)果就會(huì)跟著改變。有點(diǎn)類似烹調(diào),在相同原料、相同烹調(diào)方式下,我們改變加入的調(diào)料,最終做出的東西將會(huì)也不一樣。這里的映射表,我們叫之為“密鑰”。
2小結(jié)
通過base64算法,可以看出,一個(gè)加密算法會(huì)有兩部分組成:密鑰、算法。兩者不能都公開,都公開的話,就可以被人逆向運(yùn)算,進(jìn)行解密。一般的,我們將密鑰進(jìn)行保密,將算法進(jìn)行公開。算法的公開,有利于算法的推廣,普及,更有利于尋找算法中的漏洞。也就是因?yàn)閎ase64同時(shí)公開了算法、密鑰,所以我們說他并不是真正的加密算法。當(dāng)然如果你調(diào)整了上面映射表,那么也能做到加密算法的目的,不過base64加密的強(qiáng)度比較差,所以不建議在實(shí)際應(yīng)用中作為加密算法使用。
3. 摘要算法介紹
1基本
我們?cè)谄綍r(shí)的工作中經(jīng)常聽到MD5算法。比如在一些下載頁面里會(huì)給出一個(gè)md5的作為文件驗(yàn)證串,在迅雷下載中作為文件的唯一標(biāo)識(shí)。這類算法嚴(yán)格上來說也不是加密算法,是一種叫做摘要算法的算法,不過在平時(shí)的使用中,我們經(jīng)常將摘要算法混合使用,所以在廣義上來說也可以將他叫為加密算法。
2摘要長(zhǎng)度
摘要算法的特點(diǎn)是可以將任意長(zhǎng)度的字符串,給轉(zhuǎn)換為定長(zhǎng)的字符串。可以意料的是,在這個(gè)轉(zhuǎn)換過程中,一定是一共單向的過程。打個(gè)比方,我們將一個(gè)256長(zhǎng)度的字符串轉(zhuǎn)換為128長(zhǎng)度的字符串,轉(zhuǎn)換前有N^256種可能,轉(zhuǎn)換后有N^128種可能,這一定不可能是1對(duì)1的對(duì)應(yīng)關(guān)系。
所以我們只要保證摘要串(轉(zhuǎn)換后的串)位數(shù)只夠的長(zhǎng),使得“給定一個(gè)字符串A,經(jīng)過摘要算法處理后的串B,很難找到一個(gè)字符串C,其摘要后的串和串B相同” 即可。所以目前主流的摘要算法MD/SHA的摘要串長(zhǎng)度都在128位以上。而正是出于這個(gè)原因,美國(guó)還對(duì)長(zhǎng)摘要串的加密算法進(jìn)行了出口的限制。
3通訊模型
摘要算法在平時(shí)的使用中,經(jīng)常以如下的形式進(jìn)行:
假設(shè)客戶端需要傳輸一段信息data給服務(wù)器端,為了data在網(wǎng)絡(luò)中數(shù)據(jù)的完整性,或者說防止信息data被惡意的用戶篡改,可以始終這種安全通信模型:客戶端與服務(wù)器端實(shí)現(xiàn)確定了加密密鑰key,一段任意的字符串,客戶端將key與數(shù)據(jù)data拼接在一起,進(jìn)行摘要得到摘要串C,將data、C傳給服務(wù)器端,服務(wù)器端得到data和C后,同樣使用與客戶端相同的方法,計(jì)算摘要串S,如果S等于C的話,就說明A在傳輸中,沒有被人篡改。
流程如下圖:對(duì)于我們?cè)谕ㄐ诺拿媾R的四種威脅,摘要算法是否能防范呢:- 截獲:由于網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)依然的明文的,對(duì)于攻擊者來說暴露無遺,所以摘要算法對(duì)于這種威脅,沒什么辦法。
- 中斷:摘要算法,是對(duì)數(shù)據(jù)的驗(yàn)證,對(duì)整個(gè)網(wǎng)絡(luò)的可用性方面的攻擊,無法防范。
- 篡改:客戶端發(fā)出的數(shù)據(jù),中途被攻擊者進(jìn)行了修改,由于攻擊者并不知道密鑰key,將無法生成正確的摘要串。所以,摘要算法可以防范篡改威脅。
- 偽造:攻擊者偽造成客戶端,給服務(wù)器端發(fā)數(shù)據(jù),但由于拿不到密鑰key,偽造不出摘要串。所以,在這種情況下,摘要算法是有一定的防范作用的。但是,在偽造威脅中,還有一種是重放攻擊,攻擊者事先將客戶端發(fā)給服務(wù)器端的包截下來,然后重復(fù)發(fā)送。例如:客戶端發(fā)給服務(wù)器端密碼時(shí),被攻擊者記錄了下來,當(dāng)下次,服務(wù)器端再向客戶端詢問密碼時(shí),攻擊者只需將記錄下來的包發(fā)給服務(wù)器端即可。所以摘要算法對(duì)于偽造威脅的防范是不徹底的,其只可以辨別偽造的內(nèi)容,不能辨別偽造的發(fā)送方。
常見的摘要算法有MD5/MD4/SHA-1/SHA-2等,其摘要串長(zhǎng)度也不盡相同?,F(xiàn)在MD4/MD5/SHA-1等一些摘要串長(zhǎng)度128比特的摘要算法已不再安全,山東大學(xué)的王小波教授已經(jīng)證明MD4/MD5/SHA-1已經(jīng)可以快速生成“碰撞”。所以在真正的對(duì)安全性要求極高的場(chǎng)所還是使用長(zhǎng)摘要串的摘要算法來的靠譜一些。
4. 對(duì)稱加密算法介紹
1基本
理論上說對(duì)稱加密算法,才是我們真正說的加密算法。所謂對(duì)稱加密算法,通俗的講,就是使用密鑰加密,再使用密鑰解密的加密算法的總稱。也就是平時(shí)我們說到加密算法,腦子里第一個(gè)跳出來的加密方式一般都是對(duì)稱加密算法。上面將的base64其實(shí)也是一種“對(duì)稱加密算法”,只是其密鑰公開了而已。
2通訊模型
同樣的場(chǎng)景:客戶端要將數(shù)據(jù)data發(fā)給服務(wù)器端。客戶端對(duì)使用密鑰key,對(duì)數(shù)據(jù)data加密,生成加密串C,通過網(wǎng)絡(luò)將C傳輸為服務(wù)器端,服務(wù)器端,使用密鑰key對(duì)C解密,獲取數(shù)據(jù)data,做自己的業(yè)務(wù)邏輯。
簡(jiǎn)單直接的一種加密方式,與摘要算法不同的地方是,加密過程其是雙向的,C由data加密而來,同樣可以解密獲得data,前提條件是加密解密時(shí)的key相同。而摘要算法無法從C解密得到data。
加密過程簡(jiǎn)單,那么其在對(duì)抗通信中面臨的四種威脅的作用有怎么樣呢:- 截獲:這么在網(wǎng)絡(luò)中傳輸?shù)膬?nèi)容為密文,即使攻擊者截獲了報(bào)文,由于沒有密鑰,也無法解析。所以,這次對(duì)稱加密算法在防范截獲威脅方面有這很大的優(yōu)勢(shì)。
- 中斷:和摘要算法一樣,無法防范。
- 篡改:由于數(shù)據(jù)是密文傳輸?shù)模粽?,無法解析,更無法偽造了。所以,可以防范。
- 偽造:對(duì)于數(shù)據(jù)的偽造,和摘要算法一樣,可以防范,但對(duì)于偽造的發(fā)送方,對(duì)稱加密算法和摘要算法一樣,比較的無力。
3算法優(yōu)缺點(diǎn)
對(duì)稱加密算法有著很多的好處,比較加密速度快,算法簡(jiǎn)單,安全模型的安全性較高等,但在正式中使用時(shí),卻不得不解決一個(gè)問題:密鑰如何傳遞。如果將密鑰在網(wǎng)絡(luò)中傳遞,勢(shì)必有被截獲的風(fēng)險(xiǎn)。由于這個(gè)問題的存在,導(dǎo)致單純的使用對(duì)稱加密算法的通訊模型,并不是一個(gè)通用的模型,只在一些特殊的場(chǎng)合中使用,例如:客戶端/服務(wù)器端為同一端點(diǎn),或者線下合作的場(chǎng)景——雙方將密鑰寫入合同中,線下傳遞。
不過對(duì)于密鑰,還是建議經(jīng)常的更換,密鑰的破解是一個(gè)耗時(shí)的過程,長(zhǎng)時(shí)間不變的密鑰,無遺對(duì)攻擊者創(chuàng)造了破解的機(jī)會(huì),當(dāng)有一天攻擊者破解了密鑰,滅頂之災(zāi)也就來到。
說了這么多的對(duì)稱加密算法,還沒有說對(duì)稱加密算法有哪些,比較常用的對(duì)稱加密算法有DES/3DES/AES/IDEA/RC4/RC2等。其加密強(qiáng)度,可以從其支持的密鑰長(zhǎng)度看出,密鑰越長(zhǎng),加密強(qiáng)度越好;同時(shí),加密過程越慢。
5. 非對(duì)稱加密算法介紹
1基本
對(duì)稱加密算法指加密解密用同一密鑰,那么非對(duì)稱加密就是加密解密用不同的密鑰。加密算法一次生成兩個(gè)密鑰,一個(gè)叫做公鑰,一個(gè)較為密鑰。公鑰加密的數(shù)據(jù),用密鑰解密;密鑰加密的數(shù)據(jù),用公鑰來解密(有些非對(duì)稱加密算法,只能用密鑰加密,公鑰解密,或只能用密鑰加密,公鑰解密)。
非對(duì)稱加密算法的確神奇,其理論的基礎(chǔ)來自于數(shù)論。例如RSA算法建立在數(shù)論中的“大數(shù)分解和素?cái)?shù)檢測(cè)”的理論基礎(chǔ)上。而ElGamal和ECC算法基于的則是數(shù)論中的“離散對(duì)數(shù)問題”。數(shù)學(xué)中的最后一個(gè)未找到應(yīng)用場(chǎng)景的分支學(xué)科——數(shù)論,終于在加密學(xué)領(lǐng)域,找到了應(yīng)用場(chǎng)景,這不得不說是個(gè)奇跡。
非對(duì)稱加密算法的加入,使得加密算法得以真正的完整,他有這舉足輕重的作用。他很好的解決了對(duì)稱加密算法的缺陷。
2通訊模型
客戶端要將數(shù)據(jù)data發(fā)送給服務(wù)器端,客戶端向服務(wù)器端發(fā)起對(duì)話請(qǐng)求,服務(wù)器端生成一對(duì)密鑰——公鑰Gkey和私鑰Skey。將Gkey發(fā)送給客戶端,客戶端使用Gkey對(duì)數(shù)據(jù)data進(jìn)行加密,獲得密文C,將C發(fā)給服務(wù)器端,服務(wù)器端使用自己的Skey解密,獲得數(shù)據(jù)data,完成后續(xù)業(yè)務(wù)邏輯。
從上面的通訊模型中可以看到,在網(wǎng)絡(luò)中傳輸?shù)闹挥忻芪腃、和公鑰Gkey。而私鑰Skey不會(huì)在網(wǎng)絡(luò)中傳輸,攻擊者只能獲取到公鑰,無法對(duì)解密密文C,也就保證了數(shù)據(jù)的安全性。詳細(xì)的分析下通訊中面臨的四種威脅:
- 截獲:同樣網(wǎng)絡(luò)中傳輸?shù)氖敲芪?,即時(shí)被截獲,攻擊者沒有私鑰,也無法解析密文。所以可以很好的防范截獲威脅。
- 中斷:對(duì)于針對(duì)可用性的攻擊,由于一般都是基于底層協(xié)議的攻擊,所以一般很難防范。
- 篡改:由于數(shù)據(jù)是密文傳輸?shù)模粽邲]有私鑰,無法解析,更無法偽造了。
- 偽造:對(duì)于數(shù)據(jù)的偽造,和摘要算法一樣,可以防范,但對(duì)于偽造的發(fā)送方,對(duì)稱加密算法和摘要算法一樣,比較的無力。
和對(duì)稱加密算法一樣,只能對(duì)通信中的截獲、篡改有防范作用,對(duì)其他兩個(gè)中斷、偽造威脅都無法防范。而由于非對(duì)稱加密算法,很好的解決了對(duì)稱加密算法中密鑰交換的問題,所以其有著很不錯(cuò)的應(yīng)用場(chǎng)景,可以說是一種通用的加密模型。
3算法優(yōu)缺點(diǎn)
那么非對(duì)稱加密算法就沒有缺點(diǎn)嗎?也不是,首先,我們看上面的通訊模型,他比對(duì)稱加密算法的通訊模型來的復(fù)雜,存在著兩次請(qǐng)求/響應(yīng)。此外,非對(duì)稱加密算法的計(jì)算可能會(huì)很慢,比對(duì)稱加密算法來慢得多。所以,非對(duì)稱加密算法在解決了對(duì)稱加密算法的缺陷后,存在著一些性能問題,比較通用的解決辦法是將兩種加密算法進(jìn)行結(jié)合——先使用非對(duì)稱加密算法傳遞臨時(shí)的對(duì)稱加密算法的密鑰,密鑰傳遞完成后,再使用更快的對(duì)稱加密算法來進(jìn)行真正的數(shù)據(jù)通信。
典型的非對(duì)稱加密算法有RSA/ElGamal/ECC算法,除了這兩個(gè)算法外,還有一個(gè)DH算法,其比較的另類,其設(shè)計(jì)的初衷就是解決對(duì)稱加密算法中密鑰安全交換的問題。其通訊模型如下:
所有客戶端生成一堆公鑰CGkey和私鑰CSkey,將AGkey發(fā)給服務(wù)器端。服務(wù)器端通過AGkey生成服務(wù)器端的公鑰SGkey和私鑰SSkey,并將SGkey發(fā)還給客戶端??蛻舳送ㄟ^CSkey與SGkey生成對(duì)稱加密算法的密鑰key,服務(wù)器端通過CGkey和SSkey生成相同的密鑰key。后續(xù)客戶端和服務(wù)器端都是用各自的密鑰key來通信。
不得不說,這又是一個(gè)多么神奇的算法。但是他的確存在。并且早于其他的非對(duì)稱加密算法。
6. 數(shù)字簽名介紹
1基本
以上三種算法都有防篡改的功能,但摘要算法、和對(duì)稱加密算法若要防篡改,則需要交換密鑰,這又是一件麻煩事兒。所以一般在單純的防篡改的需求上,都是使用非對(duì)稱加密算法。但若是對(duì)整個(gè)明文進(jìn)行加密的話,加密過程勢(shì)必消耗大量時(shí)間,所以就誕生了數(shù)字簽名。
數(shù)字簽名,本質(zhì)上就是非對(duì)稱加密算法,但出于解密運(yùn)行效率的考慮,并是不對(duì)明文進(jìn)行加密,而是對(duì)明文的摘要加密,生成“數(shù)字串”,并將“數(shù)字串”附在明文之后。
數(shù)字簽名實(shí)際上是非對(duì)稱加密算法的一個(gè)妥協(xié)方案,為了提高加解密的效率,舍棄了非對(duì)稱加密算法對(duì)截獲威脅的優(yōu)勢(shì)。
2通訊模型
先來看非對(duì)稱加密算法的第一種通訊模型,由客戶端生成一堆密鑰——公鑰Gkey和私鑰Skey,并使用Skey對(duì)明文data進(jìn)行加密,獲得密文C。將C與Gkey發(fā)送給服務(wù)器端,服務(wù)器端使用Gkey對(duì)C進(jìn)行解密。
這種通訊模型,只需要一次請(qǐng)求/響應(yīng)過程,但卻無法防范截獲威脅,由于最后的密文C的解密用的是公鑰Gkey,而Gkey在通過網(wǎng)絡(luò)傳遞,所以攻擊者可以很方便的對(duì)數(shù)據(jù)進(jìn)行截獲、解密,獲得明文data。但這種通訊模型,對(duì)于數(shù)字簽名的場(chǎng)景正合適,數(shù)字簽名的場(chǎng)景并不準(zhǔn)備防范“截獲”威脅。
那么下面來看下完整的數(shù)字簽名的通訊模型:服務(wù)器端生成一堆密鑰,公鑰Gkey和私鑰Skey,在將明文data進(jìn)行摘要,獲得摘要串Z1,使用私鑰對(duì)Z1加密,獲得密文C,將C,data,Gkey發(fā)給服務(wù)器端,服務(wù)器端使用Gkey解密后獲得Z1,重新根據(jù)data計(jì)算出摘要Z2,通過比較Z1是否等于Z2來判斷數(shù)據(jù)是否被篡改。
以上的模型主要由兩個(gè)步驟組成,摘要與非對(duì)稱加密算法的應(yīng)用。平常我們經(jīng)常用到的簽名算法,也是這兩種算法的組合,比如:SHA1wthRSA,使用SHA1來做摘要,RSA做未對(duì)稱加密;MD5withRSA,使用MD5做摘要算法,RSA做未對(duì)稱加密;SHA1withDSA,DSA是ElGamal算法的一種改進(jìn)。
7. 數(shù)字證書介紹
1基本
上面說了這么多算法,又是摘要算法,又是對(duì)稱加密算法,又是非對(duì)稱加密算法的。但是對(duì)于通訊中的四種威脅——截獲、中斷、篡改、偽造最多也就只能解決其中的兩個(gè),對(duì)于中斷、和偽造威脅,只能干瞪眼。難道,就沒有其他辦法了嗎。
對(duì)于中斷,一般是網(wǎng)絡(luò)拓?fù)浠騾f(xié)議級(jí)別要解決的問題,已經(jīng)超出了我們的范疇,暫時(shí)不表,我們只能做到的是當(dāng)網(wǎng)絡(luò)不可用時(shí),傳輸?shù)臄?shù)據(jù)出現(xiàn)丟包或異常時(shí)可以進(jìn)行及時(shí)的建設(shè),這里就需要用到數(shù)據(jù)完整性的驗(yàn)證了。
至于,要對(duì)付攻擊者“偽造”的威脅,這不僅僅是單一算法層面可以解決的問題了。
2通訊模型
正如上面幾節(jié)所說,偽造分為兩種,一種是數(shù)據(jù)偽造,只要做好防篡改的工作,數(shù)據(jù)偽造都可以很好的防范。另外一種是偽裝成某一網(wǎng)站,與用戶進(jìn)行交互,盜取用戶的一些信。比較常見的如釣魚網(wǎng)站、黑代理服務(wù)器等。
哪非對(duì)稱加密算法的通訊模型來舉個(gè)例子??蛻舳薃在獲得給自己公鑰時(shí),并沒有懷疑與公鑰發(fā)出方的身份,客戶端A以為發(fā)給他的依然B,實(shí)際上,B發(fā)出的公鑰已經(jīng)被攻擊者C攔截并丟棄了,C重新生成公鑰偽裝為B發(fā)給了客戶端,后續(xù)的流程實(shí)際上都是攻擊者C在于客戶端A通訊,而客戶端A則以為與自己通訊的是服務(wù)器B。
這個(gè)偽造的過程在平時(shí)我們的生活中也經(jīng)常會(huì)碰見,比如:在實(shí)名制以前,張三買到火車票后,半路被人打劫,車票被搶。這就有點(diǎn)類似于遭遇了攻擊者的攻擊,攻擊者搶走了張三的火車票(公鑰Gkey),并偽造了一張可以以將亂真的車票,(重新生成公鑰Gkey’)使用這張車票上火車。整個(gè)過程看似天衣無縫,攻擊者獲得了一張免費(fèi)的車票,張三損失了一張火車票。
當(dāng)然,現(xiàn)在這種火車票qiang劫的事件已經(jīng)不太會(huì)發(fā)生了,因?yàn)橐呀?jīng)實(shí)行了實(shí)名制。實(shí)名制的引入,給我們解決上面的“偽造”威脅提供了一個(gè)方案?;疖嚻睂?shí)名制,使用了身份證作為驗(yàn)證用戶身份的一個(gè)證明。那么我們?cè)诰W(wǎng)絡(luò)通訊中是否也可以引入這么個(gè)“網(wǎng)站身份證”呢?;卮鹗强隙ǖ?,目前也正是這么做的,我們叫他“數(shù)字證書”。
3CA
正如我們身份證是由可信任的公安局辦發(fā)。數(shù)字證書也是由權(quán)威機(jī)構(gòu)簽發(fā),我們叫做CA,CA會(huì)保證證書的確是發(fā)給了應(yīng)該得到該證書的的人。CA也屬于一個(gè)機(jī)構(gòu),他也有被人偽造的風(fēng)險(xiǎn)。所以CA一般是分級(jí)的,頂層的叫做RootCA,由他保證下面的CA的身份。
所以我們的機(jī)器里,保存著有限的幾個(gè)RootCA的機(jī)構(gòu)的公鑰。打個(gè)比方,張三有個(gè)數(shù)字證書,是由A這個(gè)CA機(jī)構(gòu)頒發(fā)的,A的身份由RootCA來保證。當(dāng)瀏覽器與張三的網(wǎng)站進(jìn)行通訊時(shí),獲取到了張三的數(shù)字證書,實(shí)際上這個(gè)數(shù)字證書是個(gè)嵌套的證書,里面包含著兩個(gè)子證書:RootCA頒發(fā)給A的證書,和A頒發(fā)給張三網(wǎng)站的證書。在瀏覽器中保存著有限個(gè)著RootCA的公鑰。使用RootCa的公鑰對(duì)A證書進(jìn)行驗(yàn)證,驗(yàn)證通過,使用A證書里的公鑰對(duì)張三網(wǎng)站的證書進(jìn)行驗(yàn)證,只有再次驗(yàn)證通過后,才能說張三網(wǎng)站的證書得到了確認(rèn)。
整個(gè)驗(yàn)證過程是一個(gè)信任鏈。
數(shù)字證書里主要包含著兩樣?xùn)|西:數(shù)字證書所有者的身份信息,數(shù)字證書所有者的公鑰。為了保證證書在網(wǎng)絡(luò)中通信不被篡改,證書里會(huì)帶上這些信息的數(shù)字簽名。那么對(duì)數(shù)字證書的驗(yàn)證就是對(duì)數(shù)字簽名的驗(yàn)證,這就是上圖中每次證書的驗(yàn)證都要使用到公鑰的原因了。