1. 程式人生 > 其它 >數字證書各種格式解釋

數字證書各種格式解釋

X.690,它是ITU-T標準,規定了幾種ASN.1編碼格式:

  Basic Encoding Rules (BER)
  Canonical Encoding Rules (CER)
  Distinguished Encoding Rules (DER)

一、名詞解釋

1、.der (Distinguished Encoding Rules)區分編碼規則

DER 是ASN.1 眾多編碼方案中的一個。DER 是 BER 的子集,對資料產生一個唯一的序列化表示。
DER格式的證書是二進位制形式,儲存在以 .der 和 .cer 為副檔名的檔案中。這些證書大部分使用在基於java的web伺服器上。
而一般 PEM 檔案使用的是base64進行編碼,所以可以把 DER 編碼的檔案轉換成 PEM 檔案。

2、.pem (Privacy-Enhanced Mail)隱私增強郵件
.pem 是一種容器格式,可以將服務端證書(server certificate),中間證書(intermediate certificate)和私鑰(private key)包含在一個檔案中。用於儲存和傳送加密金鑰,證書和其他資料。可能僅包含公鑰證書,也可以包含完整的證書鏈(包括公玥,私鑰,和根證書)。

服務端證書和中間證書也可以分別存放在.crt 和 .cer 兩個檔案中。私鑰可以單獨在一個 .key 檔案中。
PEM 格式則使用 Base64 編碼二進位制資料,所以你可以用文字編輯器開啟它,例如notepad,微軟的word等等。

PEM檔案的檔案格式:

-----BEGIN (label)-----
/*  data  */
-----END (label)-----

label 決定了被編碼訊息的型別,通常這些型別有如下一些:
"CERTIFICATE", "CERTIFICATE REQUEST", "PRIVATE KEY", "ENCRYPTED PRIVATE KEY" and "X509 CRL".

---- BEGIN CERTIFICATE----
/* 證書 */
----END CERTIFICATE----

---- BEGIN RSA PRIVATE KEY-----
/*    私鑰    */
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE REQUEST-----
/*    CSR    */
-----END CERTIFICATE REQUEST-----

......

PEM 格式的資料通常儲存在以 ".pem",".cer",".crt"(證書)或者".key"(公鑰或私鑰)為字尾的檔案中。

3、.key

.key 其實就是一個pem格式只包含私玥的檔案,.key 作為檔名只是作為一個明顯的別名。

4、.csr    (certificate signing request )證書籤名請求

.csr 是證書請求檔案,是由 RFC 2986定義的PKCS10格式,包含部分/全部的請求證書的資訊,比如,主題, 機構,國家等,並且包含了請求證書的公玥,這些被CA中心簽名後返回一張證書。返回的證書是公鑰證書(只包含公玥不含私鑰)。

證書籤名請求是申請人向證書頒發機構傳送的一條訊息,用於申請數字身份證書。

有CSR必定有KEY,是成對的,CSR最終變成為證書crt,和私鑰key配對使用。證書下發後,CSR就沒有用了,只是在交時候需要。 

5、X.509

Public-Key Infrastructure (X.509) (pkix)
在密碼學中,X.509 公鑰證書格式的標準,也應用於許多Internet協議,包括TLS/SSL,它是HTTPS的基礎。
一個X.509證書包含一個公鑰和一個標識(主機名、組織或個人),由證書頒發機構簽名或自簽名。
X.509 還定義了證書撤銷列表,這是一種分發被簽名機構認為無效的證書資訊的方法,以及認證路徑驗證演算法,該演算法允許證書由中間CA證書籤名,而中間CA證書又由其他證書籤名,最終到達信任錨。

 

6、PKCS     (Public Key Cryptography Standards)(公鑰密碼學標準)

常見的有PKCS#7,PKCS#10,PKCS#12,其他的格式忽略吧

6.1、PKCS#7:

Cryptographic Message Syntax Standard
加密訊息語法標準。
副檔名:.p7b .p7c .spc
使用Base64 ASCII編碼,用於在PKI下簽名和/或加密訊息,還用於證書分發(例如作為對PKCS #10訊息的響應)。只有證書可以儲存在這種格式的檔案中(例如作為對 “PKCS #10證書籤名請求標準” 訊息的響應),私鑰則不可以。
P7B證書包含在BEGIN (label) END (label)之間:

-----BEGIN PKCS7-----
/* P7B證書 */
-----END PKCS7-----

6.2、PKCS #8:

Private-Key Information Syntax Standard
私鑰資訊語法標準,用於攜帶私有證書金鑰對(加密或未加密)。

6.3、PKCS#10:

Certification Request Standard
證書籤名請求標準,傳送給認證機構要求認證公鑰的訊息的格式。

6.4、PKCS#12:

Personal Information Exchange Syntax Standard
個人資訊交換語法標準。
副檔名:.pfx 或 .p12,以二進位制形式儲存資料。
PKCS#12檔案可以儲存服務端證書,中間證書,公鑰,私鑰,並使用基於密碼的對稱金鑰進行保護。PFX 是 PKCS#12的前身。
跟pem檔案不同的是,它的內容是完全加密的,用openssl可以把其轉換成包含公鑰和私鑰的 .pem 檔案。
命令: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
這類證書主要使用在Windows平臺。

 

二、SSL Certificate (編碼)格式

SSL Certificate實際上就是X.509 Certificate。X.509使用名為 Abstract Syntax Notation One (ASN.1)的通用語言來描述certificate的資料結構。

X.509 certificate 有幾種不同的格式,例如 PEM,DER,PKCS#7 和 PKCS#12。 PEM和PKCS#7格式使用Base64 ASCII編碼,而DER和PKCS#12使用二進位制編碼。

如下圖就展示了X.509證書的編碼方式和副檔名。

 

 

 

IOS證書: .cer格式,二進位制編碼
Android證書: .crt格式,base64編碼