近期由于項目需要,開始轉向 CA 證書相關的知識惡補中,都很少寫日志了。
廢話少說,進入正題,本人之前沒有接觸過加密,也就更沒有接觸過 認證相關的知識,如下內容為學習過程中個人體會。
本文參考《PKI/CA 與數字證書技術大全》書籍,如有理解bug, 請大家指正。
數字證書通常可分為兩大類,根據證書持有者分類和根據密鑰分類。
根據證書持有者分類
根據證書持有者是否為 CA 進行分類
根據證書持有者是否為 CA ,可將證書分為 2 類: CA 證書 和 用戶證書。 CA 證書可以給用戶或其他 CA 簽發證書,用戶證書不允許給其他用戶或 CA 簽發證書。
X.509 格式中通過擴展 BasicConstraints 來區分這2類證書。當其中的 cA 項為 TRUE 時表示 CA 證書, 為 FALSE 時表示用戶證書。按照證書持有者類型進行分類
根據證書持有者類型,通常將證書分為幾類:個人證書、單位證書和系統證書等。
- 個人證書 CA 系統給個人簽發的證書,代表個人身份。證書中需要包含個人信息(如姓名、身份證、E-mail、電話等) 和個人的公鑰。
- 單位證書 CA 系統給機構或組織等簽發的證書,代表單位身份。證書中需要包含單位信息(如名稱、組織機構代碼、E-mail、聯系人等) 和單位公鑰。
- 系統證書 CA 系統給軟件系統或設備系統等簽發的證書,代表系統身份。證書中需要包含系統信息(如 IP 地址、域名等) 和系統的公鑰。系統證書又包括 Web 服務器證書、域控制器證書、VPN 設備證書、OCSP 服務器證書、時間戳服務器證書等。
X.509 格式本身并不支持這種分類,通常通過在 Subject 中增加 DN 項進行區分,如可以增加 OU = PERSON 表示個人證書,OU=UNIT 表示單位證書等。
根據密鑰分類
-
根據密鑰對產生方式進行分類
根據密鑰對產生方式,可將證書分為2類:簽名證書和加密證書。- 簽名證書及私鑰只用于簽名驗簽,不用做加密解密。為保證該密鑰對的唯一性,該密鑰對必須由用戶端密碼模塊產生和保存,在證書簽發過程中 CA 中心并不知道其私鑰,只對其公鑰進行操作。
- 加密秘鑰及私鑰只用于加密解密,不能用于簽名驗簽。為實現秘鑰恢復或行業監管,該密鑰對必須由CA中心產生,并回送給用戶端密碼模塊保存。CA 中心同時保存該密鑰對,必要時可恢復該密鑰對。
-
根據證書用途進行分類
根據證書用途,通常將證書分為 SSL 服務器證書、SSL 客戶端證書、代碼簽名證書、 Email 證書、時間戳服務器證書、OCSP服務器證書等。SSL 證書只用于 SSL/TLS 應用, Email 證書只用于安全電子郵件,代碼簽名證書只用于對代碼進行簽名驗簽。
X.509 格式中通過擴展項 ExtKeyUsage 來區分這幾類證書。為保持證書內容的統一性,擴展項 KeyUsage 必須設置合適的值。
ExtKeyUsage 中已經定義的類型如下:- id-kp-serverAuth: 用于 SSL/TLS Web 服務器身份認證
- id-kp-clientAuth: 用于 SSL/TLS Web 客戶端身份認證
- id-kp-codeSigning: 用于對可下載的執行代碼進行簽名
- id-kp-emailProtection: 用于保護Email
- id-kp-timeStamping: 用于將對象摘要值與時間綁定
- id-kp-OCSPSigning: 用于OCSP響應包進行簽名