1. 程式人生 > >數字證書常見格式及相互轉換

數字證書常見格式及相互轉換

常見證書格式及相互轉換

PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標準,PKCS 目前共釋出過 15 個標準。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard X.509是常見通用的證書格式。所有的證書都符合為Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標準。 PKCS#7 常用的字尾是: .P7B .P7C .SPC
PKCS#12 常用的字尾有: .P12 .PFX
X.509 DER 編碼(ASCII)的字尾是: .DER .CER .CRT
X.509 PAM 編碼(Base64)的字尾是: .PEM .CER .CRT
.cer/.crt是用於存放證書,它是2進位制形式存放的,不含私鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放個人證書/私鑰,他通常包含保護密碼,2進位制方式
p10是證書請求
p7r是CA對證書請求的回覆,只用於匯入
p7b以樹狀展示證書鏈(certificate chain),同時也支援單個證書,不含私鑰。
—————-
小美注:
der,cer檔案一般是二進位制格式的,只放證書,不含私鑰
crt檔案可能是二進位制的,也可能是文字格式的,應該以文字格式居多,功能同der/cer
pem檔案一般是文字格式的,可以放證書或者私鑰,或者兩者都有
pem如果只含私鑰的話,一般用.key副檔名,而且可以有密碼保護
pfx,p12檔案是二進位制格式,同時含私鑰和證書,通常有保護密碼
怎麼判斷是文字格式還是二進位制?用記事本開啟,如果是規則的數字字母,如
—–BEGIN CERTIFICATE—–
MIIE9jCCA96gAwIBAgIQVXD9d9wgivhJM//a3VIcDjANBgkqhkiG9w0BAQUFADBy
—–END CERTIFICATE—–
就是文字的,上面的BEGIN CERTIFICATE,說明這是一個證書
如果是—–BEGIN RSA PRIVATE KEY—–,說明這是一個私鑰
文字格式的私鑰,也可能有密碼保護
文字格式怎麼變成二進位制? 從程式角度來說,去掉前後的—-行,剩下的去掉回車,用base64解碼,就得到二進位制了
不過一般都用命令列openssl完成這個工作
—————
一 用openssl建立CA證書的RSA金鑰(PEM格式):
openssl genrsa -des3 -out ca.key 1024

二用openssl建立CA證書(PEM格式,假如有效期為一年):
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf
openssl是可以生成DER格式的CA證書的,最好用IE將PEM格式的CA證書轉換成DER格式的CA證書。

三 x509到pfx
pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -out keys/client1.pfx

四 PEM格式的ca.key轉換為Microsoft可以識別的pvk格式。
pvk -in ca.key -out ca.pvk -nocrypt -topvk

五 PKCS#12 到 PEM 的轉換
openssl pkcs12 -nocerts -nodes -in cert.p12 -out privatekey.pem
openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem openssl pkcs12 -nodes -in ./cert.p12
-out ./cert_key.pem

六 從 PFX 格式檔案中提取私鑰格式檔案 (.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key

七 轉換 pem 到到 spc
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc
用 -outform -inform 指定 DER 還是 PAM 格式。例如:
openssl x509 -in Cert.pem -inform PEM -out cert.der -outform DER

八 PEM 到 PKCS#12 的轉換,
openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem

九 cer 到 pem
openssl x509 -in aps_developer.cer -inform DER -out aps_developer.pem -outform PEM

十 der 到 pem
der和cer是一樣的,如果openssl x509不能load證書,報如下錯:
unable to load certificate
就說明不是一個證書,用下面的命令試一下,因為der也可能是一個csr轉換格式後的檔案:
openssl req -inform der -outform pem -in ./customer.der -out ./customer.csr
十一、金鑰去掉加密(使用時不用手動輸入密碼)
openssl rsa -in customerPrivateKey.pem -out ./customerPrivateKey_unenrypted.pem
十二、合成證書和金鑰
cat ./customerPrivateKey_unenrypted.pem ./mdm_push_cert.pem > merger2.pem

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

常見數字證書及協議介紹

證書主要的檔案型別和協議有: PEM、DER、PFX、JKS、KDB、CER、KEY、CSRCRTCRL 、OCSP、SCEP等。

PEM – Openssl使用 PEM(Privacy Enhanced Mail)格式來存放各種資訊,它是 openssl 預設採用的資訊存放方式。Openssl 中的 PEM 檔案一般包含如下資訊:

  1. 內容型別:表明本檔案存放的是什麼資訊內容,它的形式為“——-BEGIN XXXX ——”,與結尾的“——END XXXX——”對應。
  2. 頭資訊:表明資料是如果被處理後存放,openssl 中用的最多的是加密資訊,比如加密演算法以及初始化向量 iv。
  3. 資訊體:為 BASE64 編碼的資料。可以包括所有私鑰(RSA 和 DSA)、公鑰(RSA 和 DSA)和 (x509) 證書。它儲存用 Base64 編碼的 DER 格式資料,用 ascii 報頭包圍,因此適合系統之間的文字模式傳輸。

使用PEM格式儲存的證書:

($ openssl x509 -in ./cacert.pem -text    )

—–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—–

DER – 辨別編碼規則 (DER) 可包含所有私鑰、公鑰和證書。它是大多數瀏覽器的預設格式,並按 ASN1 DER 格式儲存。它是無報頭的 - PEM 是用文字報頭包圍的 DER。
PFX 或 P12 – 公鑰加密標準 #12 (PKCS#12) 可包含所有私鑰、公鑰和證書。其以二進位制格式儲存,也稱為 PFX 檔案。通常可以將Apache/OpenSSL使用的“KEY檔案 +CRT檔案”格式合併轉換為標準的PFX檔案,你可以將PFX檔案格式匯入到微軟IIS 5/6、微軟ISA、微軟Exchange Server等軟體。轉換時需要輸入PFX檔案的加密密碼。
JKS – 通常可以將Apache/OpenSSL使用的“KEY檔案 +CRT檔案”格式”轉換為標準的Java Key Store(JKS)檔案。JKS檔案格式被廣泛的應用在基於JAVA的WEB伺服器、應用伺服器、中介軟體。你可以將JKS檔案匯入到TOMCAT、 WEBLOGIC 等軟體。
KDB – 通常可以將Apache/OpenSSL使用的“KEY檔案 +CRT檔案”格式轉換為標準的IBM KDB檔案。KDB檔案格式被廣泛的應用在IBM的WEB伺服器、應用伺服器、中介軟體。你可以將KDB檔案匯入到IBM HTTP Server、IBM Websphere 等軟體。
CSR - 證書請求檔案(Certificate Signing Request)。生成 X509 數字證書前,一般先由使用者提交證書申請檔案,然後由 CA 來簽發證書。大致過程如下(X509 證書申請的格式標準為 pkcs#10 和 rfc2314):

  1. 使用者生成自己的公私鑰對;
  2. 構造自己的證書申請檔案,符合 PKCS#10 標準。該檔案主要包括了使用者資訊、公鑰以及一些可選的屬性資訊,並用自己的私鑰給該內容簽名;
  3. 使用者將證書申請檔案提交給 CA;
  4. CA 驗證簽名,提取使用者資訊,並加上其他資訊(比如頒發者等資訊),用 CA 的私鑰簽發數字證書;
  5. 說明:數字證書(如x.509)是將使用者(或其他實體)身份與公鑰繫結的資訊載體。一個合法的數字證書不僅要符合 X509 格式規範,還必須有 CA的簽名。使用者不僅有自己的數字證書,還必須有對應的私鑰。X509v3數字證書主要包含的內容有:證書版本、證書序列號、簽名演算法、頒發者資訊、有效時間、持有者資訊、公鑰資訊、頒發者 ID、持有者 ID 和擴充套件項。

OCSP– 線上證書狀態協議(OCSP,Online Certificate StatusProtocol,rfc2560)用於實時表明證書狀態。OCSP 客戶端通過查詢 OCSP服務來確定一個證書的狀態,可以提供給使用者一個或多個數字證書的有效性資料,它建立一個可實時響應的機制,讓使用者可以實時確認每一張證書的有效性,解決由CRL引發的安全問題。。OCSP 可以通過 HTTP協議來實現。rfc2560 定義了 OCSP 客戶端和服務端的訊息格式。
CER  - 一般指使用DER格式的證書。der和cer是一樣的,都是一個證書,cer是windows上用的。
CRT - 證書檔案。可以是PEM格式。
KEY   - 一般指PEM格式的私鑰檔案。
CRL- 證書吊銷列表 (Certification Revocation List) 是一種包含撤銷的證書列表的簽名資料結構。CRL是證書撤銷狀態的公佈形式,CRL 就像信用卡的黑名單,用於公佈某些數字證書不再有效。CRL是一種離線的證書狀態資訊。它以一定的週期進行更新。CRL 可以分為完全 CRL和增量 CRL。在完全 CRL中包含了所有的被撤銷證書資訊,增量 CRL 由一系列的 CRL 來表明被撤銷的證書資訊,它每次釋出的 CRL 是對前面釋出 CRL的增量擴充。基本的 CRL 資訊有:被撤銷證書序列號、撤銷時間、撤銷原因、簽名者以及 CRL 簽名等資訊。基於 CRL的驗證是一種不嚴格的證書認證。CRL 能證明在 CRL 中被撤銷的證書是無效的。但是,它不能給出不在 CRL中的證書的狀態。如果執行嚴格的認證,需要採用線上方式進行認證,即 OCSP認證。一般是由CA簽名的一組電子文件,包括了被廢除證書的唯一標識(證書序列號),CRL用來列出已經過期或廢除的數字證書。它每隔一段時間就會更新,因此必須定期下載該清單,才會取得最新資訊。
SCEP - 簡單證書註冊協議。基於檔案的證書登記方式需要從您的本地計算機將文字檔案複製和貼上到證書釋出中心,和從證書釋出中心複製和貼上到您的本地計算機。 SCEP可以自動處理這個過程但是CRLs仍然需要手工的在本地計算機和CA釋出中心之間進行復制和貼上。
PKCS7 – 加密訊息語法(pkcs7),是各種訊息存放的格式標準。這些訊息包括:資料、簽名資料、數字信封、簽名數字信封、摘要資料和加密資料。
PKCS12 – pkcs12 (個人數字證書標準)用於存放使用者證書、crl、使用者私鑰以及證書鏈。pkcs12 中的私鑰是加密存放的。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

數字證書cer和pfx的區別

作為檔案形式存在的證書一般有這幾種格式:

1.帶有私鑰的證書

  由Public Key Cryptography Standards #12,PKCS#12標準定義,包含了公鑰和私鑰的二進位制格式的證書形式,以pfx作為證書檔案字尾名。

2.二進位制編碼的證書

  證書中沒有私鑰,DER 編碼二進位制格式的證書檔案,以cer作為證書檔案字尾名。

3.Base64編碼的證書

證書中沒有私鑰,BASE64 編碼格式的證書檔案,也是以cer作為證書檔案字尾名。

由定義可以看出,只有pfx格式的數字證書是包含有私鑰的,cer格式的數字證書裡面只有公鑰沒有私鑰。

    如果客戶端與網站通訊時需要用到私鑰(基本所有需要數字證書的網站都會用到私鑰),則cer證書是無法正常訪問網站的,網站會提示“該頁要求客戶證書”。

    由於cer證書只包含公鑰資訊,一般只能用於解密使用(解密該公鑰對應的私鑰加密的資料)。

  在pfx證書的匯入過程中有一項是“標誌此金鑰是可匯出的。這將您在稍候備份或傳輸金鑰”。一般是不選中的,如果選中,別人就有機會備份你的金鑰了。如果是不選中,其實金鑰也匯入了,只是不能再次被匯出。這就保證了金鑰的安全。

  如果匯入過程中沒有選中這一項,做證書備份時“匯出私鑰”這一項是灰色的,不能選。只能匯出cer格式的公鑰。如果匯入時選中該項,則在匯出時“匯出私鑰”這一項就是可選的。

  如果要匯出私鑰(pfx),是需要輸入密碼的,這個密碼就是對私鑰再次加密,這樣就保證了私鑰的安全,別人即使拿到了你的證書備份(pfx),不知道加密私鑰的密碼,也是無法匯入證書的。相反,如果只是匯入匯出cer格式的證書,是不會提示你輸入密碼的。因為公鑰一般來說是對外公開的,不用加密

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

證書與編碼

本至上,X.509證書是一個數字文件,這個文件根據RFC 5280來編碼並/或簽發。

實際上,“X.509證書”經常被用來指代IETF的PKIX(Public Key Infrastructure)證書和X.509 v3 證書標準中的CRL(Certificate Revocation List)。

X509 副檔名

首先我們要理解檔案的副檔名代表什麼。DER、PEM、CRT和CER這些副檔名經常令人困惑。很多人錯誤地認為這些副檔名可以互相代替。儘管的確有時候有些副檔名是可以互換的,但是最好你能確定證書是如何編碼的,進而正確地標識它們。正確地標識證書有助於證書的管理。

編碼 (也用於副檔名)

  • .DER = 副檔名DER用於二進位制DER編碼的證書。這些證書也可以用CER或者CRT作為副檔名。比較合適的說法是“我有一個DER編碼的證書”,而不是“我有一個DER證書”。
  • .PEM = 副檔名PEM用於ASCII(Base64)編碼的各種X.509 v3 證書。檔案開始由一行"—– BEGIN …“開始。

常用的副檔名

  • .CRT = 副檔名CRT用於證書。證書可以是DER編碼,也可以是PEM編碼。副檔名CER和CRT幾乎是同義詞。這種情況在各種unix/linux系統中很常見。
  • CER = CRT證書的微軟型式。可以用微軟的工具把CRT檔案轉換為CER檔案(CRT和CER必須是相同編碼的,DER或者PEM)。副檔名為CER的檔案可以被IE識別並作為命令呼叫微軟的cryptoAPI(具體點就是rudll32.exe cryptext.dll, CyrptExtOpenCER),進而彈出一個對話方塊來匯入並/或檢視證書內容。
  • .KEY = 副檔名KEY用於PCSK#8的公鑰和私鑰。這些公鑰和私鑰可以是DER編碼或者PEM編碼。

CRT檔案和CER檔案只有在使用相同編碼的時候才可以安全地相互替代。


相關推薦

數字證書常見格式相互轉換

常見證書格式及相互轉換 PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標準,PKCS 目前共釋出過 15 個標準。 常用的有: PKCS#7 Cryptographic Messa

數字證書常見格式整理

數字證書常見標準 符合PKI ITU-T X509標準,傳統標準(.DER .PEM .CER .CRT) 符合PKCS#7 加密訊息語法標準(.P7B .P7C .SPC .P7R) 符合PKCS#10 證書請求標準(.p10) 符合PKCS#12 個人資訊交換標準(.pfx *.p12) X509是數字

openssl數字證書常見格式與協議介紹

證書主要的檔案型別和協議有: PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL 、OCSP、SCEP等。PEM – Openssl使用 PEM(Privacy Enhanced Mail)格式來存放各種資訊,它是 openssl 預設採用的資訊存

常見證書型別相互轉換

PEM Format The PEM format is the most common format that Certificate Authorities issue certificates in. PEM certificates usually have extentions

OpenSSL:證書格式相互轉換, 例如.pem,.crt,.cer,.pfx

PEM格式 PEM格式是證書頒發機構頒發證書的最常見格式.PEM證書通常具有副檔名,例如.pem,.crt,.cer和.key。它們是Base64編碼的ASCII檔案,包含“----- BEGIN CERTIFICATE -----”和“----- END CERTIFIC

YUV 格式與 RGB 格式相互轉換公式C++ 程式碼

YUV 格式與 RGB 格式的相互轉換公式 最近在用的一個工業相機,輸出的影象格式是 YUY2 格式。而在電腦上顯示時需要 RGB 格式,所以就花了些時間在網上查了些相關的資料。說實話,網上關於 YUV 與 RGB 格式變換的文章挺多的,本來不需要我再多寫這麼

字節流與字符流的區別相互轉換

處理 作文 ioe 應該 流處理 exceptio 技術 高級 內容 轉自:http://www.cnblogs.com/sjjsh/p/5269781.html 先來看一下流的概念: 在程序中所有的數據都是以流的方式進行傳輸或保存的,程序需要數據的時候要

day16——import、datetime獲得時間、時間格式相互轉換

rda 北京 type __init__ 轉換成 我們 不同的 包含 介紹 在日常的開發工作中,我們要寫很多的Python代碼,如果都寫在一個文件中,會導致代碼特別難維護,為了拓展代碼的可維護性,我們把函數寫在不同的文件裏,這樣每個文件包含的文件就比較少,邏輯更加清

10.2-10.3 datetime與時間格式相互轉換

datetime time stampSubclass relationships: 這類直接的對應關系# object # timedate # tzinfo # time #基本不使用 # date # datetime #一般使用 datetime 取時間 import time f

js時間戳與日期格式相互轉換

value hour ole div 得到 AR var minutes mes 下面總結一下js中時間戳與日期格式的相互轉換: 1. 將時間戳轉換成日期格式: function timestampToTime(timestamp) { var date

js時間戳與日期格式之間相互轉換

時間日期 TP var gets nbsp unix時間 其他 value nds 時間戳:是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。Unix時間戳不僅被使用在Unix系統、類Unix系統中,也在許多其他操作系統中被

String[]和List<String>的區別相互轉換

Hello,everybody。好幾天不見啦,我一直在想著怎麼整場大戲,琢磨寫個好點的文章。(其實是因為玩了一個星期,emmmm,因為懶)。 1.兩者的區別 結構方面: List< String >:泛型,非定長,可變。 String[]:陣列,定長,不可

MySQL時間戳與日期格式相互轉換

MySQL時間戳與日期格式的相互轉換,PHP時間戳與日期格式的相互轉換 MySQL: 獲取當前時間 SELECT NOW(); // 2018/10/11 14:22:51 時間日期格式轉換成時間戳格式,UNIX_TIMESTAMP()

和安全有關的那些事 非對稱加密 數字摘要 數字簽名 數字證書 SSL HTTPS其他

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

數字(金錢格式相互轉化

/** * 數字格式化金錢展示 * @param {*} num 串數字 * @returns */ export const numFormat = (num) => { if (typeof (num) != 'number') { num = Number

String[]與List的區別相互轉換

String[]只能存放String格式資料,而且一般的是固定大小長度的; List指的是集合,<>是泛型,裡面存放一個實體類可以是String,int或者自定義的;  List<String> list=new List<String>(); 

進位制相互轉換

一· 進位制:進位制人們規定的·進位方法,X進位制即為逢X進一位。 二· 常見進位制:二進位制,八進位制,十進位制,十六進位制。 二進位制:逢二進一,由0 1組成,以0b開頭。 八進位制:(將二進位制數每3位分為一組,不夠的前面補0,然後將每一組換算為十進位制再進行拼接):逢八進一,由0 1

java檔案路徑問題Eclipse package,source folder,folder區別相互轉換

eclipse下,建立一個source folder(我建立的是folder,),名稱為resource,呼叫時 為   "resource/bg.gif" ; //注意resource前面沒有 /" 有/則錯誤 eclipse的相對路徑起始位置位於當前包的根目錄,system.g

# PHP時間戳與日期格式相互轉換 MySQL時間戳與日期格式相互轉換

PHP: 獲取當前時間戳 time(); // 1539238975 時間戳格式轉換成時間日期格式 date('Y-m-d H:i:s', time()); // 2018-11-16 20:00:00 時間日期格式轉換成時間戳格式 strtotime

js時間戳與日期格式相互轉換(轉)

下面總結一下js中時間戳與日期格式的相互轉換: 1. 將時間戳轉換成日期格式: 1 2 3 4 5 6 7 8 9 10 11 12 function t