http://blog.chinaunix.net/space.php?uid=23637692&do=blog&id=3057988
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給出了證書頒發者認定爲無效的證書的序列號列表。
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(終止時間)
-
Validity(有效期)
-
-
Subject(主題) 包括以下類容
-
Common Name(CN, 公共名稱)
-
Organization Name(O, 單位名稱) Locality(L, 城市)
-
State(S, 省份)
- Country(C, 國家, 字母縮寫)
-
Subject(主題) 包括以下類容
-
-
Subject Public Key Info(公鑰信息)
-
Public Key Algorithm(公鑰算法)
- Subject Public Key(公鑰)
-
Subject Public Key Info(公鑰信息)
- 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無關方式嚮應用標識自己身份.
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編碼私鑰文件,可以使用或不使用密碼保。
普通用戶如需要申請證書,則以一定的格式(如csr/p7r等)向某一級CA提供證書所需信息(用戶名/聯繫方式/證書用途等等)提出證書申請請求,CA審覈通過後將用戶信息/證書用途/頒發時間/有效期/證書序號/用戶公鑰/簽名算法等等信息填入證書,並使用自己的私鑰對以上信息進行簽名,最終將證書和用戶私鑰頒發給用戶。對於證書被頒發者或者第三人,可以使用CA的公鑰來驗證證書的有效性。
PKI體系中,CA是分層的,下一級CA的證書由上一級CA頒發;用戶/系統/應用如果信任某一個CA,則信任此CA頒發的下一級證書。換句話說,某一個證書,如果用戶信任證書庫中存在着一條從某個根CA到此證書的完整證書鏈,則此證書受信;否則不被信任。
對於根CA,由於不存在級別比自己還高的CA,所以根CA的證書是由自己簽發的,也即,根CA使用了自己的私鑰對自己的證書進行的簽名(而普通用戶的證書是由證書頒發CA的私鑰進行簽名的),這就是自簽名證書。一般操作系統都已經預置了一些可信根CA證書(如VeriSign等),用戶也可以選擇自行安裝其他根CA證書將其加入系統證書庫中。