SSL 數字證書的標準、編碼以及文件擴展名

你是否經常像我一樣對於 SSL 數字證書的各種編碼格式和擴展名諸如 .pem、.der、.crt、.cer、.csr、.p12、X.509 等表示很困惑,這篇文章將告訴你答案。
我們知道,在 HTTPS(HTTP over SSL)請求的 SSL 握手階段,服務端以數字證書的方式將 RSA 公鑰傳給客戶端,以保證公鑰在傳輸過程中不被篡改,而公鑰將用於加密後續數據傳輸對稱加密的密鑰(以後再細講這一過程)。
SSL 數字證書的主要目的是用於傳遞服務端公鑰,我們下面來了解一下證書的標準、編碼格式以及常見的文件擴展名。
證書標準
• X.509 數字證書標準,定義證書文件的結構和內容,詳情參考 RFC5280。SSL 數字證書通常採用這種標準,一般由用戶公共密鑰和用戶標識符組成,此外還包括版本號、證書序列號、CA 標識符、簽名算法標識、簽發者名稱、證書有效期等信息。一個 X.509 標準的 SSL 數字證書包含(但不限於)以下的字段:
這裏寫圖片描述
下圖就是我個人博客 kangzubin.cn 域名下的數字證書,可通過 Chrome 瀏覽器查看其詳細內容。
這裏寫圖片描述
證書的編碼格式
X.509 標準的證書文件具有不同的編碼格式,一般包括 PEM 和 DER 兩種。
• PEM: Privacy Enhanced Mail 的縮寫,以文本的方式進行存儲。它的文件結構以 —–BEGIN XXX—–,並以 —–END XXX—– 結尾,中間 Body 內容爲 Base64 編碼過的數據。
例如,以 PEM 格式存儲的證書結構大概如下:

1 —–BEGIN CERTIFICATE—–
2 Base64編碼過的證書數據
3 —–END CERTIFICATE—–
4
5
通過如下 OpenSSL 命令可以查看其證書內容:

1 openssl x509 -in xxx.pem -text -noout
它也可以用來編碼存儲公鑰(RSA PUBLIC KEY)、私鑰(RSA PRIVATE KEY)、證書籤名請求(CERTIFICATE REQUEST)等數據。
使用PEM格式存儲的證書:
—–BEGIN CERTIFICATE—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END CERTIFICATE—–
使用PEM格式存儲的私鑰:
—–BEGIN RSA PRIVATE KEY—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END RSA PRIVATE KEY—–
使用PEM格式存儲的證書請求文件:
—–BEGIN CERTIFICATE REQUEST—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END CERTIFICATE REQUEST—–
一般 Apache 和 Nginx 服務器應用偏向於使用 PEM 這種編碼格式。
• DER: Distinguished Encoding Rules 的縮寫,以二進制方式進行存儲,文件結構無法直接預覽,同樣可以通過如下 OpenSSL 命令查看其證書內容:

1   openssl x509 -in xxx.der -inform der -text -noout

一般 Java 和 Windows 服務器應用偏向於使用 DER 這種編碼格式。
當然同一 X.509 證書的不同編碼之間可以互相轉換:
• PEM 轉爲 DER:

1   openssl x509 -in xxx.pem -outform der -out xxx.der
• DER 轉爲 PEM:

1   openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem

證書的幾種文件擴展名
證書文件擴展名是比較誤導人的地方,我之前也一直沒搞明白!
如上所述,對於 X.509 標準的證書兩種不同編碼格式,一般採用 PEM 編碼就以 .pem 作爲文件擴展名,若採用 DER 編碼,就應以 .der 作爲擴展名。但常見的證書擴展名還包括 .crt、.cer、.p12 等,他們採用的編碼格式可能不同,內容也有所差別,但大多數都能互相轉換,現總結如下:
• .pem: 採用 PEM 編碼格式的 X.509 證書的文件擴展名;
• .der: 採用 DER 編碼格式的 X.509 證書的文件擴展名;
• .crt: 即 certificate 的縮寫,常見於類 UNIX 系統,有可能是 PEM 編碼,也有可能是 DER 編碼,但絕大多數情況下此格式證書都是採用 PEM 編碼;
• .cer: 也是 certificate 的縮寫,常見於 Windows 系統,同樣地,可能是 PEM 編碼,也可能是 DER 編碼,但絕大多數情況下此格式證書都是採用 DER 編碼;
• .p12: 也寫作 .pfx,全稱:PKCS #12,是公鑰加密標準(Public Key Cryptography Standards,PKCS)系列的一種,它定義了描述個人信息交換語法(Personal Information Exchange Syntax)的標準,可以用來將包含了公鑰的 X.509 證書和證書對應的私鑰以及其他相關信息打包,進行交換。簡單理解:一份 .p12 文件 = X.509 證書+私鑰;
• .csr: Certificate Signing Request 的縮寫,即證書籤名請求,它並不是證書的格式,而是用於向權威證書頒發機構(Certificate Authority, CA)獲得簽名證書的申請,其核心內容包含一個 RSA 公鑰和其他附帶信息,在生成這個 .csr 申請的時候,同時也會生成一個配對 RSA 私鑰,私鑰通常需要嚴格保存於服務端,不能外泄。
• .key: 通常用來存放一個 RSA 公鑰或者私鑰,它並非 X.509 證書格式,編碼同樣可能是 PEM,也可能是 DER,查看方式如下:

1   PEM 編碼格式:openssl rsa -in xxx.key -text -noout
2   DER 編碼格式:openssl rsa -in xxx.key -text -noout -inform der

以上。

參考
• X.509
• PKCS #12
• 那些證書相關的玩意兒
• 證書編碼以及文件格式彙總
http://bbs.csdn.net/topics/190044123

來自 http://blog.csdn.net/u011001084/article/details/54708258

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章