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

kf@jusoucn.com
4008-020-360


4008-020-360
