PKI體系及常見證書
原文
1.PKI體系 1.1 PKI(Public Key Infrastructure,公鑰基礎架構)
PKI是一套以公鑰技術為基礎、提供安全服務的架構, 由認證機構(CA), 數字證書庫, 金鑰備份和恢復, 證書作廢系統, 應用介面等組成。CA是PKI的核心,CA的主要功能有:證書發放、證書管理(更新、撤消、驗證)。
幾個基本概念:
- 證書(Certificate):數字證書證明證書主題所描述的主體對公鑰的擁有關係。
- 根證書:位於證書層次的最高層,所有證書鏈均終結於根證書。 >從屬證書:由上一級認證機構頒發的證書。
- 自簽名證書:證書中的公鑰和用於驗證證書的金鑰是相同的。自簽名證書都是根證書。
- 認證中心(Certificate Authority/Certification Authority):頒發數字證書的機構。
- 根CA:一種特殊的CA,受到無條件地信任,位於證書層次結構的最高層。根CA必須對自己的證書籤名,因為在證書層次結構中不存在更高的認證機構。常見根CA有:VeriSign, GlobalSign, Thawte, GeoTrust等。
- 從屬CA:擁有上一級CA的CA。從屬CA的證書中公鑰和用於驗證證書的金鑰是不相同的。
- CA/證書的層級結構:PKI架構中,從根CA開始,CA體系表現為自上而下的層次結構。下級CA信任上一級CA;下級CA由上一級CA頒發證書並認證。
- 公鑰(Public Key):不對稱金鑰加密體系中,可以提供給他人使用的金鑰。一般包含在證書中。
- 私鑰(Private Key):不對稱金鑰加密體系中,僅供自己使用的金鑰。
- 證書撤消列表(Certificate Revocation List, CRL):CRL給出了證書頒發者認定為無效的證書的序列號列表。
1.2 X.509標準
X.509標準是ITU-T為PKI所設計的一套標準。X.509標準定義了公鑰證書(public key certificate), 證書撤消列表(certificate revocation list), 屬性證書(attributes certificat), 和證書路徑驗證
通常,X.509證書包含以下資訊:
Certificate
- Version(版本號)
- Serial Number(序列號)
- Algorithm ID(演算法ID)
- Issuer(頒發者)
-
- Validity(有效期)
- Not Before(起始時間)
- Not After(終止時間)
-
- Subject(主題) 包括以下類容
- Common Name(CN, 公共名稱)
- Organization Name(O, 單位名稱) Locality(L, 城市)
- State(S, 省份)
- Country(C, 國家, 字母縮寫)
-
- Subject Public Key Info(公鑰資訊)
- Public Key Algorithm(公鑰演算法)
- Subject Public Key(公鑰)
- Issuer Unique Identifier (Optional)(頒發者唯一ID, 可選)
- Subject Unique Identifier (Optional)(主題唯一ID, 可選)
- Extensions (Optional)(擴充套件,可選)
- Certificate Signature Algorithm(證書籤名演算法)
- Certificate Signature(證書籤名)
1.3 PKCS(Public-key cryptography standards)
RSA資料安全公司釋出的一組公鑰加密系統標準, 主要涉及證書申請,更新,撤消列表釋出,數字簽名,數字封裝等方面。
到目前為止,PKCS標準共有15個
PKCS已釋出的標準有:
- PKCS#1 : RSA Cryptography Stand. RSA密碼編譯標準.RSA公鑰和私鑰數學特性和格式,以及執行RSA加密/解密,簽名生成和驗證的基本演算法.
- PKCS#2 : RSA訊息摘要加密. 已撤消, 合併入PKCS#1
- PKCS#3 : Diffie-Hellman Key Agreenment Standard. D-H金鑰交換協議, 通訊雙方在不安全通訊通道中協商公用安全金鑰的協議.
- PKCS#4 : RSA金鑰語法. 已撤消,合併入PKCS#1
- PKCS#5 : Password-based Encryption Standard. 使用基於密碼的金鑰加密字串的方法.
- PKCS#6 : Extended-Certificate Syntax Standard. 擴充套件證書語法標準. 舊的X.509 v1版本證書擴充套件規範. X.509 v3廢棄.
- PKCS#7 : Cryptographic Message Syntax Standard. 加密訊息語法標準. 用於公鑰交換(PKI)方式下如何對訊息進行加密或簽名;也可用於證書分發.
- PKCS#8 : Private-Key Information Syntax Standard. 私鑰資訊語法標準. 如何描述私鑰資訊.
- PKCS#9 : Selected Attribute Types. 一些被選作用於PKCS#6證書擴充套件, PKCS#7數字簽名訊息, PKCS#8私鑰資訊,PKCS#10證書籤名請求的屬性.
- PKCS#10: Certification Request Standard. 證書請求標準. 傳送至CA的證書請求的訊息格式.
- PKCS#11: 加密系統通用應用程式介面,Cryptoki
- PKCS#12: 個人資訊交換語法標準. 用於儲存使用了密碼保護的私鑰及相應公鑰證書的檔案格式. PFX為PKCS#12的前身.
- PKCS#13: Elliptic Curve Cryptography Standard. 橢圓曲線加密體系標準. 基於有限域橢圓曲線代數結構的公鑰加密體系. 開發中.
- PKCS#14: Pseudo-random Number Generation. 偽隨機數生成標準. 開發中
- PKCS#15: Cryptographic Token Information Format Standard. 加密令牌資訊格式標準. 允許加密令牌使用者可以以與應用Cryptoki無關方式嚮應用標識自己身份.
1.4 PEM(Privacy-enhanced Electronic Mail),增加隱私電子郵件標準
PEM是早期IETF建議的一套使用公鑰加密體系的安全電子郵件標準. 由於各種原因未能大規模應用。不過,PEM標準中基於Base64編碼的X.509證書成為了CA證書的通用格式之一。
PEM檔案以"-----BEGIN CERTIFICATE-----"標識開始,以"-----END CERTIFICATE-----"標識終結。支援在同一檔案中描述多個證書。
PKCS & X.509 & PEM
簡單地說,PKCS和X.509是不同組織/公司所釋出的針對PKI內不同領域的兩個/套標準。PKCS系列標準中所涉及到的證書部分均遵守X.509標準。
X.509標準所考慮的核心問題是(公鑰)證書的格式/內容,如何檢驗證書的有效性,以及證書撤消列表等。
PKCS系列標準所關注的則是整個公鑰加密體系。在PKCS釋出的一系列標準中,有些與證書無關(因此也就與X.509無直接關係),如下面列出的 PKCS#1 RSA密碼編譯標準;有些則與X.509有直接關係,如PKCS#6是在X.509證書最初v1版本基礎上的擴充套件,隨著X.509證書版本升級到 v3,PKCS#6則被廢棄;再如PKCS#12個人資訊交換語義標準,定義了包含公鑰證書和個人私鑰的個人資訊檔案的格式,其中的公鑰證書部分則完全遵守X.509證書格式。
PEM格式證書指採用了採用Base64編碼的X.509證書(除X.509標準證書內容外,PEM中還可以將個人私鑰等物件儲存進來)。
1.5 兩種編碼規範
同樣內容的證書,可以採用不同的編碼方式。
DER(Distinguished Encoding Rules):ITU-T X.690中規定的一套將任意型別資料編碼為二進位制格式的規範,可認為是BER(Basic Encoding Rules)子集之一。
Base64編碼:將二進位制資料每6位元一組轉換為64個可列印ASCII字元之一的一種3B4B編碼方式。最初用來對電子郵件進行編碼,後也被應用於其他領域。
2 常見證書格式
常見證書相關檔名字尾
- .csr :X.509證書請求檔案(Certificate Signing Request)。CA簽名後生成.crt證書檔案
- .cer, .crt, .der : DER二進位制編碼的X.509證書,不包含私鑰
- .pem : PEM Based64編碼的DER證書(或證書鏈,可包含私鑰)
- .p7b, .p7c : PKCS#7標準證書(或證書鏈,不包含私鑰). Win平臺下常被用來儲存證書鏈. 證書存放在"-----BEGIN PKCS7-----"和"-----END PKCS7-----"之間.
- .p7r : PKCS#7證書請求
- .p10:PKCS#10證書籤名請求檔案。CA簽名後以p7r檔案回覆。
- .p12 : PKCS#12標準證書. 通常包含證書, 公鑰, 以及使用了密碼保護的私鑰
- .pfx : PKCS#12格式的前身. 通常包含有PKCS#12格式的資料. Win平臺下常用作匯入/匯出證書及私鑰.
- .pvk : 微軟用於存放私鑰的檔案格式
- .spc(Software Publishing Certificate) : 微軟軟體釋出證書,用於給軟體進行簽名。
- .key : Base64編碼私鑰檔案,可以使用或不使用密碼保。
3. 證書申請/發放/自簽名
普通使用者如需要申請證書,則以一定的格式(如csr/p7r等)向某一級CA提供證書所需資訊(使用者名稱/聯絡方式/證書用途等等)提出證書申請請求,CA稽核通過後將使用者資訊/證書用途/頒發時間/有效期/證書序號/使用者公鑰/簽名演算法等等資訊填入證書,並使用自己的私鑰對以上資訊進行簽名,最終將證書和使用者私鑰頒發給使用者。對於證書被頒發者或者第三人,可以使用CA的公鑰來驗證證書的有效性。
PKI體系中,CA是分層的,下一級CA的證書由上一級CA頒發;使用者/系統/應用如果信任某一個CA,則信任此CA頒發的下一級證書。換句話說,某一個證書,如果使用者信任證書庫中存在著一條從某個根CA到此證書的完整證書鏈,則此證書受信;否則不被信任。
對於根CA,由於不存在級別比自己還高的CA,所以根CA的證書是由自己簽發的,也即,根CA使用了自己的私鑰對自己的證書進行的簽名(而普通使用者的證書是由證書頒發CA的私鑰進行簽名的),這就是自簽名證書。一般作業系統都已經預置了一些可信根CA證書(如VeriSign等),使用者也可以選擇自行安裝其他根CA證書將其加入系統證書庫中。