[SSL] 數位簽名與驗證的過程
SSL 是用來提升 HTTP 安全性的手法,網路上不乏許多原理講解與實作,但有一個現象是,講到如何驗證憑證是否為某CA所發,都是說以CA公鑰去檢查憑證,但到底檢查甚麼,又是怎樣檢查的,非常令人好奇,因此查了一些相關資訊並記錄在這。
- 認證機構(CA)會先對要簽署的數據(Data, 例如:Public Key, Subject ... 等等憑證資訊)做哈希(Hash)運算,得到哈希值(Hash Value),再以CA的私鑰(Private Key)對其加密,防止被更改,這個產出即為數位簽章(Digital Signature)\[ Data\xrightarrow{HASH\;By\;CA}Hash\;Value\xrightarrow{Private\;Key\;of\;CA}Digital\;Signature \]
- 得到數位簽章後,將其與原本資料合起來,就為所謂的「數位憑證」(Digital Certificate)\[ Data+Digital\;Signature=Digital\;Certificate \]
- 在進行 https 連線的過程中,Server 會給一個數位憑證,就是上一步所得到的產物!
- 客戶端拿到數位憑證後,就要驗證是否真的為憑證上說的CA所發,第一步先把憑證拆回 Data 與 Digital Signature\[ Digital\;Certificate=Data+Digital\;Signature \]
- 客戶端對 Data 做 Hash 運算\[ Data\xrightarrow{HASH\;By\;Client}Hash\;Value \]
- 客戶端再對 Digital Signature 做解密運算,拿回 CA 對 Data 做完 Hash 的結果\[ Digital\;Signature\xrightarrow{Public\;Key\;of\;CA}Hash\;Value\;via\;Signature \]
- 再比對客戶自己得到 Hash 值與由解密數位簽章得到的 Hash 值是否相同,若相同,代表是該CA所發!\[ Hash\;Value\overset{\underset{\mathrm{?}}{}}{=}Hash\;Value\;via\;Signature \]
留言
張貼留言