前言
SSL 是用來提升 HTTP 安全性的手法,網路上不乏許多原理講解與實作。但我有發現一個現象,就是當講到如何驗證憑證是否為某 CA 所發,都是說以 CA 公鑰去檢查憑證,但到底檢查甚麼,又是怎樣檢查的,非常令人好奇,因此查了一些相關資訊並整理後記錄在這。
產製數位憑證
認證機構 (CA) 會先對要簽署的數據 (Data, 例如:Public Key, Subject ... 等等憑證資訊,皆為明碼) 做雜湊 (Hash) 運算,得到雜湊值 (Hash Value),再以 CA 的私鑰 (Private Key) 對其加密以達到防止更改效果,這個產出即為數位簽章 (Digital Signature)
得到數位簽章後,將其與原本資料合起來,就為所謂的數位憑證 (Digital Certificate)
這個數位憑證就會被稱為被某 CA 所簽發的憑證。
驗證數位簽章
在進行 https 連線的過程中,Server 會給 Client 一個數位憑證,當 Client 拿到數位憑證後,會馬上驗證是否真的為憑證上說的CA所發。
第一步把憑證拆回 Data 與 Digital Signature
Client 先自行對 Data 做 Hash 運算
再對 Digital Signature 做解密運算,取得 CA 對 Data 做 Hash 運算的結果
再比對 Client 自己算出的 Hash Value 與經由數位簽章解密所得到的 Hash Value 是否相同,若相同,表示此憑證確實是該 CA 所發!