數(shù)字證書(shū)和?CA?機(jī)構(gòu)
在說(shuō)校驗(yàn)數(shù)字證書(shū)是否可信的過(guò)程前寡壮,我們先來(lái)看看數(shù)字證書(shū)是什么巾钉,?個(gè)數(shù)字證書(shū)通常包含了:
? ??公鑰惭笑;
? ??持有者信息汞斧;
? ??證書(shū)認(rèn)證機(jī)構(gòu)(CA)的信息滔驶;
? ??CA?對(duì)這份?件的數(shù)字簽名及使?的算法蔽挠;
? ??證書(shū)有效期;
還有?些其他額外信息瓜浸;
那數(shù)字證書(shū)的作?澳淑,是?來(lái)認(rèn)證公鑰持有者的身份,以防?第三?進(jìn)?冒充插佛。說(shuō)簡(jiǎn)單些杠巡,證書(shū)就是?來(lái)告訴客戶(hù)端,該服務(wù)端是否是合法的雇寇,因?yàn)橹挥凶C書(shū)合法氢拥,才代表服務(wù)端身份是可信的。我們?證書(shū)來(lái)認(rèn)證公鑰持有者的身份(服務(wù)端的身份)锨侯,那證書(shū)?是怎么來(lái)的嫩海??該怎么認(rèn)證證書(shū)呢?為了讓服務(wù)端的公鑰被?家信任囚痴,服務(wù)端的證書(shū)都是由?CA?(Certificate Authority叁怪,證書(shū)認(rèn)證機(jī)構(gòu))簽名的,CA就是?絡(luò)世界?的公安局深滚、公證中?奕谭,具有極?的可信度涣觉,所以由它來(lái)給各個(gè)公鑰簽名,信任的??簽發(fā)的證書(shū)血柳,那必然證書(shū)也是被信任的官册。之所以要簽名,是因?yàn)楹灻淖?可以避免中間?在獲取證書(shū)時(shí)對(duì)證書(shū)內(nèi)容的篡改难捌。
如下圖圖所示膝宁,為數(shù)字證書(shū)簽發(fā)和驗(yàn)證流程:
CA?簽發(fā)證書(shū)的過(guò)程,如上圖左邊部分:
?先?CA?會(huì)把持有者的公鑰根吁、?途员淫、頒發(fā)者、有效時(shí)間等信息打成?個(gè)包婴栽,然后對(duì)這些信息進(jìn)??Hash?計(jì)算满粗,得到?個(gè)?Hash?值辈末;然后?CA?會(huì)使???的私鑰將該?Hash?值加密愚争,?成?Certificate Signature,也就是?CA?對(duì)證書(shū)做了簽名挤聘;最后將?Certificate Signature?添加在?件證書(shū)上轰枝,形成數(shù)字證書(shū);
客戶(hù)端校驗(yàn)服務(wù)端的數(shù)字證書(shū)的過(guò)程组去,如上圖右邊部分:
?先客戶(hù)端會(huì)使?同樣的?Hash?算法獲取該證書(shū)的?Hash?值?H1鞍陨;通常瀏覽器和操作系統(tǒng)中集成了?CA?的公鑰信息,瀏覽器收到證書(shū)后可以使??CA?的公鑰解密?CertificateSignature?內(nèi)容从隆,得到?個(gè)?Hash?值?H2?诚撵;最后?較?H1?和?H2,如果值相同键闺,則為可信賴(lài)的證書(shū)寿烟,否則則認(rèn)為證書(shū)不可信。
證書(shū)鏈
但事實(shí)上辛燥,證書(shū)的驗(yàn)證過(guò)程中還存在?個(gè)證書(shū)信任鏈的問(wèn)題筛武,因?yàn)槲覀兿?CA?申請(qǐng)的證書(shū)?般不是根證書(shū)簽發(fā)的,?是由中間證書(shū)簽發(fā)的挎塌,?如百度的證書(shū)徘六,從下圖你可以看到,證書(shū)的層級(jí)有三級(jí):
對(duì)于這種三級(jí)層級(jí)關(guān)系的證書(shū)的驗(yàn)證過(guò)程如下:
? ??客戶(hù)端收到?baidu.com?的證書(shū)后榴都,發(fā)現(xiàn)這個(gè)證書(shū)的簽發(fā)者不是根證書(shū)待锈,就?法根據(jù)本地已有的根證書(shū)中的公鑰去驗(yàn)證?baidu.com?證書(shū)是否可信。于是嘴高,客戶(hù)端根據(jù)?baidu.com?證書(shū)中的簽發(fā)者炉擅,找到該證書(shū)的頒發(fā)機(jī)構(gòu)是?“GlobalSign Organization Validation CA - SHA256 - G2”辉懒,然后向?CA?請(qǐng)求該中間證書(shū)。
? ??請(qǐng)求到證書(shū)后發(fā)現(xiàn)?“GlobalSign Organization Validation CA - SHA256 - G2”?證書(shū)是由?“GlobalSign Root CA”簽發(fā)的谍失,由于?“GlobalSign Root CA”?沒(méi)有再上級(jí)簽發(fā)機(jī)構(gòu)眶俩,說(shuō)明它是根證書(shū),也就是?簽證書(shū)快鱼。應(yīng)?軟件會(huì)檢查此證書(shū)有否已預(yù)載于根證書(shū)清單上颠印,如果有,則可以利?根證書(shū)中的公鑰去驗(yàn)證?“GlobalSignOrganization Validation CA - SHA256 - G2”?證書(shū)抹竹,如果發(fā)現(xiàn)驗(yàn)證通過(guò)线罕,就認(rèn)為該中間證書(shū)是可信的。
? ??“GlobalSign Organization Validation CA - SHA256 - G2”?證書(shū)被信任后窃判,可以使??“GlobalSign OrganizationValidation CA - SHA256 - G2”?證書(shū)中的公鑰去驗(yàn)證?baidu.com?證書(shū)的可信性钞楼,如果驗(yàn)證通過(guò),就可以信任baidu.com?證書(shū)袄琳。
在這四個(gè)步驟中询件,最開(kāi)始客戶(hù)端只信任根證書(shū)?GlobalSign Root CA?證書(shū)的,然后?“GlobalSign Root CA”?證書(shū)信任“GlobalSign Organization Validation CA - SHA256 - G2”?證書(shū)唆樊,??“GlobalSign Organization Validation CA -SHA256 - G2”?證書(shū)?信任?baidu.com?證書(shū)宛琅,于是客戶(hù)端也信任?baidu.com?證書(shū)。
總括來(lái)說(shuō)逗旁,由于?戶(hù)信任?GlobalSign嘿辟,所以由?GlobalSign?所擔(dān)保的?baidu.com?可以被信任,另外由于?戶(hù)信任操作系統(tǒng)或?yàn)g覽器的軟件商片效,所以由軟件商預(yù)載了根證書(shū)的?GlobalSign?都可被信任红伦。
這樣的?層層地驗(yàn)證就構(gòu)成了?條信任鏈路,整個(gè)證書(shū)信任鏈驗(yàn)證流程如下圖所示: