證書4要素
pubkey(公鑰) ,有一個其一一對應的私鑰,由證書擁有者儲存。
subject(名字),可以了解為證書的名字,你可以了解為 網站的域名。
issuer(頒發者的名字),即上級證書的subject。
signature(簽名) ,上級證書使用私鑰對目前證書進行簽名的值。
證書簽名
假設 有 3 級 證書
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2QWNlZWM0UWY1ETZ1UDNiRjMmJDMkZmYyMWOihjNzAzLc12bj5yYulWLuVXepxWYuIWdw1ycz9mL19Ga6dmbhhWLuNmLn1WatITY0F2Lc9CX6MHc0RHaiojIsJye.png)
首先 ,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的用戶端進行驗證:
www.taobao.com
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
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來校驗。