天天看點

交叉證書

證書4要素

pubkey(公鑰) ,有一個其一一對應的私鑰,由證書擁有者儲存。

subject(名字),可以了解為證書的名字,你可以了解為 網站的域名。

issuer(頒發者的名字),即上級證書的subject。

signature(簽名) ,上級證書使用私鑰對目前證書進行簽名的值。

證書簽名

假設 有 3 級 證書

交叉證書

首先 ,R1 CA憑證 是由 R1證書簽發,而

www.taobao.com

是由R1 CA憑證簽發。

簽發過程核心就是簽名,比如 簽發R1 CA憑證時,拿R1證書的私鑰對R1 CA憑證進行數字簽名操作,簽名的值添加在R1 CA憑證中。同理簽發

www.taobao.com

這張證書,是用 R1 CA憑證的私鑰對該證書進行數字簽名,簽名值添加在

www.taobao.com

的證書中。

被數字簽名的值,是該證書的HASH。舉個例子當 使用 R1證書加簽R1 CA時,其簽名值是 R1_privatekey_sign( HASH(R1 CA) )。

數字證書校驗

由于 私鑰簽名的資料,可以使用公鑰校驗,假設我們信任R1 + R1 CA憑證,我們收到

www.taobao.com

這個證書,如何校驗?

首先,構造證書鍊,即 拿 server的證書然後和本地(作業系統或者浏覽器内置)的可信證書進行上級證書的查找,一般通

issuer

字段查找(還有通過keyid的方式,這裡不讨論),比如

www.taobao.com

的證書的issuer是

R1 CA

,那麼在本地倉庫裡面找

R1 CA

,接着找

R1 CA

的上級證書,直到找到最高一級的證書,即R1證書。

第二步,光靠名字來找上級是不夠的,因為名字可以僞造,我們還需要對證書的簽名值進行校驗,我們知道,私鑰簽名的資料可以使用公鑰來校驗,是以,首先拿R1 CA憑證的的公鑰,去解開

www.taobao.com

簽名值,然後校驗其值是否是

www.taobao.com

的hash,同理可以驗證證書鍊中R1是否是R1 CA的上級證書。 簽名校驗成功,表明了2點

1:上下級關系正确

2:證書被未篡改,如果證書被篡改,使用上級證書的公鑰解開目前證書後,會發現其值和目前證書的HASH值不一樣

交叉證書

如果一個CA機構有如下2個受信的鍊:

交叉證書

那麼又 R1 CA簽發的證書隻能由R1+R1 CA進行驗證;視同 R3 CA簽發的證書隻能由R3+R3 CA進行簽發。

但是有些用戶端隻有R1和R1 CA而沒有R3以及R3 CA,而有些用戶端隻有R3和R3 CA而沒有R1 以及 R1 CA ,我們能不能讓證書有2條可以用來驗證的鍊呢? 比如

www.taobao.com

->...->R1 是一條證書鍊,

www.taobao.com

->...->R3 也算一條證書鍊,這樣假設有些用戶端隻信任R1或者R3也能同時驗證同一個證書。

為了達到這個目的,我們需要做這麼一個操作,就是 使用 R1 對 R3進行簽名生成一張叫做 R1-R3 的證書(即使用R1的私鑰對R3進行簽名)。

交叉證書

注意,R1-R3 擁有和 R3一模一樣的 subject+公鑰,和R3唯一的差別就是 R3是自簽名證書,其issuer是R3自己,而 R1-R3 是中間證書,其issuer是R1。

接着,使用 R1-R3 來對 簽發

www.taobao.com

,即

www.taobao.com

的 issuer 是

R3

(上面說了,issuer就是個字元串,和上級證書的subject一樣,而R1-R3 這張證書的subject就是R3),這張

R1-R3

就是所謂的交叉證書

corss-certificate

交叉證書

www.taobao.com

這樣的證書,如何能讓隻信任R1的用戶端進行驗證:

1、構造證書鍊

伺服器發送

www.taobao.com

+

R1 R3

,用戶端構造證書鍊,自然,通過找

www.taobao.com

的issuer:R3,在server發送的證書中找到了

R1 R3

這張證書 ,通過

R1 R3

的issuer:R1,在本地找到了R1。

2、驗證證書鍊

略,通上節一緻,通過上級證書的公鑰驗證目前證書的簽名值。

www.taobao.com

這樣的證書,如何能讓隻信任R3的用戶端進行驗證:

www.taobao.com

www.taobao.com

的issuer:R3,在本地找到了受信的R3 ,R3是根證書,證書鍊構造完成。

雖然,實際上

www.taobao.com

的證書是由

R1 R3

這張證書簽名的,但是上面說過,

R1 R3

這張證書的公鑰和R3一樣,也就意味着使用

R1 R3

的公鑰,能夠驗證

www.taobao.com

的簽名值。

結尾

實際上,使用

R1-R3

www.taobao.com

簽名的效果,和使用

R3

www.taobao.com

簽名的效果是一模一樣的,因為

R1-R3

R3

擁有相同的subject以及公鑰,自然擁有相同的私鑰。

說的通俗一點,就是CA機構通過

欺騙

的方式,簽了一張交叉證書,這張證書能夠讓用戶端的證書鍊引導到R1。

交叉證書有什麼作用?

1、相容老裝置。假設,老的用戶端隻支援R1根證書,但是我們的證書是R3是簽名的,那需server發送交叉證書,來“引導”用戶端使用R1校驗。

2、CA機構合并,假設R1 收購了R3,R1為了“收回最終校驗權”,可以生成這麼一個交叉證書,那麼使用R3簽名的證書,最後都被R1來校驗。

繼續閱讀