為了避免中間人欺騙攻擊,需要服務(wù)器能夠向客戶端(瀏覽器)證明自己的身份。那么如何證明呢?
舉個(gè)例子,我們?nèi)プw機(jī)、坐火車,在進(jìn)站的時(shí)候需要出示自己的身份證來證明自己的身份。而這個(gè)身份證不是隨便誰都可以頒發(fā)的,而是需要一個(gè)權(quán)威的機(jī)構(gòu)來頒發(fā),身份證就是我們國(guó)家的公安機(jī)關(guān)來頒發(fā)的,并且具有一定的防偽措施(暫時(shí)理解為絕對(duì)可靠的)。
那么,服務(wù)器的身份證是什么呢?答案就是我們下面要討論的CA證書,而CA證書的頒發(fā)機(jī)構(gòu)就相當(dāng)于公安機(jī)關(guān),他是一個(gè)互聯(lián)網(wǎng)行業(yè)認(rèn)可的一些機(jī)構(gòu)(有多家)。下面我們就來了解一下CA證書以及CA機(jī)構(gòu)。
上海聚搜信息技術(shù)有限公司是阿里云的代理商網(wǎng)址:http://www.4526.cn/可以直接在網(wǎng)站上聯(lián)系阿里云代理商客服進(jìn)行咨詢服務(wù)器架構(gòu)和配置以及優(yōu)惠價(jià)格!(聚搜營(yíng)銷介紹鏈接:http:///meiyou/)是一家致力于搜索引聚搜營(yíng)銷及全網(wǎng)營(yíng)銷,致力于為客戶提供搜索營(yíng)銷領(lǐng)域的服務(wù),幫助廣告客戶在搜索引聚搜獲取的投資回報(bào),包括搜索引聚搜競(jìng)價(jià)服務(wù)(SEM),搜索引聚搜優(yōu)化服務(wù)(seo)和搜索營(yíng)銷代運(yùn)營(yíng)服務(wù),能夠有效為廣告主帶來高效的投放回報(bào),我們的理念一直是:讓搜索營(yíng)銷營(yíng)銷具有價(jià)值。
聚搜營(yíng)銷團(tuán)隊(duì)于2015年在上海成立,團(tuán)隊(duì)核心均來自百度搜索部門和國(guó)內(nèi)知名服務(wù)商的成員,有非常豐富的產(chǎn)品和項(xiàng)目?jī)?yōu)化經(jīng)驗(yàn),這兩年來,服務(wù)于國(guó)內(nèi)很多大中型企業(yè)和很多初創(chuàng)公司,通過我們多年的經(jīng)驗(yàn)和服務(wù),幫助他們?cè)谒阉鳡I(yíng)銷領(lǐng)域上取得了不斷的成功。
1.CA機(jī)構(gòu)的根證書
CA機(jī)構(gòu)可以對(duì)其他公司(服務(wù)器所屬公司)和提供的web服務(wù)(服務(wù)器)進(jìn)行證書簽發(fā)。而為這些服務(wù)器頒發(fā)證書需要有一個(gè)根證書。
根證書:
概念:根證書是未被簽名的公鑰證書或自簽名的證書。
什么意思呢?即CA認(rèn)證機(jī)構(gòu)的ROOT證書,實(shí)際上就是CA認(rèn)證機(jī)構(gòu)的相關(guān)信息加上他生成的一對(duì)非對(duì)稱加密秘鑰中的公鑰。如下圖:
這個(gè)證書中包含CA機(jī)構(gòu)的一個(gè)公鑰(CPK),還有CA機(jī)構(gòu)的一些明文信息。對(duì)應(yīng)的私鑰由CA機(jī)構(gòu)自己妥善保存,用于為其他公司提供的web服務(wù)器簽發(fā)證書時(shí)加密簽名使用。
當(dāng)我們認(rèn)可一個(gè)CA機(jī)構(gòu)時(shí),就需要在瀏覽器中下載安裝該機(jī)構(gòu)的根證書,一般瀏覽器會(huì)內(nèi)置他所信任的CA機(jī)構(gòu)根證書(所以一般不會(huì)手動(dòng)去安裝)。
也就是說,我們的瀏覽器(客戶端)中已經(jīng)有CA機(jī)構(gòu)的根證書了(這個(gè)很重要,后面會(huì)使用到它),CA機(jī)構(gòu)自己保留著CSK(私鑰)。
2.CA證書和申請(qǐng)流程
當(dāng)一個(gè)公司想提供一個(gè)HTTPS的服務(wù)器,則需要在互聯(lián)網(wǎng)認(rèn)可的幾家CA認(rèn)證機(jī)構(gòu)中選擇一家來申請(qǐng)CA證書。
首先,我們看一下CA證書的結(jié)構(gòu)(以百度為例):
首先,百度生成一對(duì)非對(duì)稱秘鑰(包含公鑰和私鑰),私鑰(SK)自己保存,而公鑰(PK)提供給CA機(jī)構(gòu),同時(shí)提供自己公司和提供服務(wù)的相關(guān)信息。
CA機(jī)構(gòu)收到申請(qǐng)后,大概執(zhí)行以下操作:
1)對(duì)該公司以及服務(wù)進(jìn)行核實(shí),確認(rèn)是否滿足申請(qǐng)條件
2)將公鑰和所有其他明文信息使用HASH算法(例如MD5算法)進(jìn)行散列,得到一個(gè)散列值(也叫信息摘要),這個(gè)散列值主要用于以后判斷信息是否被篡改(例如公鑰被篡改,則散列值會(huì)改變)
3)將生產(chǎn)的散列值,使用CA機(jī)構(gòu)的私鑰進(jìn)行加密(CSK私鑰),得到一個(gè)數(shù)字簽名
4)將百度提供的公鑰、信息、數(shù)字簽名形成一個(gè)CA證書,頒發(fā)給百度,放到服務(wù)器中
3.瀏覽器從服務(wù)器獲取證書
此時(shí),瀏覽器在與服務(wù)器建立HTTPS連接的時(shí)候,服務(wù)器會(huì)將CA證書發(fā)送給瀏覽器。
瀏覽器拿到這個(gè)CA證書后,會(huì)做如下操作:
1)先查看CA證書中關(guān)于CA機(jī)構(gòu)的信息,然后從瀏覽器安裝的根證書中找到對(duì)應(yīng)的CPK(如果沒有,則提示證書有問題)
2)使用CPK對(duì)數(shù)字簽名進(jìn)行解密,得到HASH散列值(摘要)
3)使用與CA機(jī)構(gòu)相同的HASH算法(例如MD5)對(duì)CA證書中的PK和明文信息進(jìn)行HASH散列,得到自己算出來的散列值
4)對(duì)比解密得到的散列值與自己計(jì)算出來的散列值是否相同,如果相同則認(rèn)為CA證書沒有被篡改過,如果不相同,則提示證書有問題
5)在CA證書無誤的情況下,證書中的PK(即百度的公鑰)也是合法可用的,后面就可以使用這個(gè)公鑰來加密key了(對(duì)稱加密的秘鑰,或秘鑰的一部分)
這里其實(shí)已經(jīng)回答了如何避免中間人欺騙攻擊這個(gè)問題了:
因?yàn)槿绻虚g人修改了CA證書中的PK或其他任何信息,那么客戶端計(jì)算出的HASH值一定和解密出來的HASH值不一樣(或無法解密)。
二、HTTPS的整體流程
既然已經(jīng)搞清楚了CA機(jī)構(gòu)、CA證書、對(duì)稱加密、非對(duì)稱加密、HASH散列,那么我們將其流程竄起來就是HTTPS的工作流程了,如圖:
流程解析,前提是已經(jīng)建立了TCP連接:
1)客戶端向服務(wù)器發(fā)送Client Hello,其中包含一個(gè)隨機(jī)數(shù)1(Random1),還有客戶端支持的加密方式(一個(gè)列表),如下所示:
2)服務(wù)器返回Server Hello,包含random2隨機(jī)數(shù),和選定的加密方式,如下所示:
3)服務(wù)器發(fā)送CA證書給客戶端,如下所示:
4)驗(yàn)證證書合法性,即解密數(shù)字簽名,計(jì)算HASH值,然后進(jìn)行對(duì)比
5)驗(yàn)證通過后,客戶端生成一個(gè)random3隨機(jī)數(shù),并連同random1和random2(之前通訊時(shí)發(fā)送給服務(wù)器的random1,以及服務(wù)器發(fā)送給客戶端的random2),計(jì)算出一個(gè)key值(就是后面進(jìn)行對(duì)稱加密用的key)。
6)使用CA證書中的PK,對(duì)random3進(jìn)行加密(key的一部分,并非key本身,因?yàn)楹诳鸵部赡苣玫阶C書中的PK),并發(fā)送給服務(wù)器。
7)服務(wù)器收到加密后的random3,使用SK(證書中公鑰PK對(duì)應(yīng)的私鑰,在百度服務(wù)器上保存著)解密,得到random3。
8)同樣使用random1、random2和random3計(jì)算一個(gè)key值,計(jì)算方式是大家協(xié)商好的,所以計(jì)算出的key值和客戶端計(jì)算出的key值應(yīng)該是一樣的。這個(gè)key就是對(duì)稱加密使用的秘鑰。
9)客戶端通過key對(duì)數(shù)據(jù)進(jìn)行加密,發(fā)送給服務(wù)器,服務(wù)器使用key解密數(shù)據(jù)。
10)服務(wù)器通過key對(duì)數(shù)據(jù)進(jìn)行加密,發(fā)送給客戶端,客戶端使用key解密數(shù)據(jù)。