1. 程式人生 > >PKI體系及常見證書

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

  1. Version(版本號)
  2. Serial Number(序列號)
  3. Algorithm ID(演算法ID)
  4. Issuer(頒發者)
    1. Validity(有效期)
    2.      Not Before(起始時間)
    3.      Not After(終止時間)
    1. Subject(主題) 包括以下類容 
    2.      Common Name(CN, 公共名稱) 
    3.      Organization Name(O, 單位名稱) Locality(L, 城市) 
    4.      State(S, 省份) 
    5.      Country(C, 國家, 字母縮寫)
    1. Subject Public Key Info(公鑰資訊)
    2.      Public Key Algorithm(公鑰演算法)
    3.      Subject Public Key(公鑰)
  5. Issuer Unique Identifier (Optional)(頒發者唯一ID, 可選)
  6. Subject Unique Identifier (Optional)(主題唯一ID, 可選)
  7. Extensions (Optional)(擴充套件,可選)
  1. Certificate Signature Algorithm(證書籤名演算法)
  2. 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證書將其加入系統證書庫中。