各種數位憑證區別

來源:互聯網
上載者:User
 

cer尾碼的認證檔案有兩種編碼-->DER二進位編碼或者BASE64編碼(也就是.pem)

p7b一般是憑證鏈結,裡麵包括1到多個認證
pfx是指以pkcs#12格式儲存的認證和相應私密金鑰。

在Security編程中,有幾種典型的密碼交換資訊檔格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b

.cer/.crt是用於存放認證,它是2進位形式存放的,不含私密金鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放個人認證/私密金鑰,他通常包含保護密碼,2進位方式
p10是認證請求
p7r是CA對認證請求的回複,只用於匯入
p7b以樹狀展示憑證鏈結(certificate chain),同時也支援單個認證,不含私密金鑰。

其中,我介紹如何從p12/pfx檔案中提取金鑰組及其長度:
1,首先,讀取pfx/p12檔案(需要提供保護密碼)
2,通過別名(Alias,注意,所有認證中的資訊項都是通過Alias來提取的)提取你想要分析的憑證鏈結
3,再將其轉換為一個以X509認證結構體
4,提取裡面的項,如果那你的認證項放在第一位(單一認證),直接讀取 x509Certs[0](見下面的代碼)這個X509Certificate對象
5,X509Certificate對象有很多方法,tain198127網友希望讀取RSA密鑰(公私密金鑰)及其長度(見http://www.matrix.org.cn/thread.shtml?topicId=43786&forumId=55&#reply),那真是太Easy了,
            X509Certificate keyPairCert = x509Certs[0];
            int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert);
            System.out.println("認證密鑰演算法="+keyPairCert.getPublicKey().getAlgorithm());
            System.out.println("認證密鑰長度="+iKeySize);
提取了他所需要的資訊。

 

X.509定義了兩種認證:密鑰憑證和屬性認證  
  PKCS#7和PKCS#12使用的都是密鑰憑證  
  PKCS#7的SignedData的一種退化形式可以分發密鑰憑證和CRL  
  一個SignedData可以包含多張密鑰憑證  
  PKCS#12可以包含密鑰憑證及其私密金鑰,也可包含整個憑證鏈結  


簡介
Java內建的keytool工具是個密鑰和認證管理工具。它使使用者能夠管理自己的公開金鑰/私密金鑰對及相關認證,用於(通過數位簽章)自我認證(使用者向別的使用者/服務認證自己)或資料完整性以及認證服務。它還允許使用者儲存他們的通訊對等者的公開金鑰(以認證形式)。

keytool 將密鑰和認證儲存在一個所謂的密鑰倉庫(keystore)中。預設的密鑰倉庫實現將密鑰倉庫實現為一個檔案。它用口令來保護私密金鑰。

Java KeyStore的類型
JKS和JCEKS是Java密鑰庫(KeyStore)的兩種比較常見類型(我所知道的共有5種,JKS, JCEKS, PKCS12, BKS,UBER)。

JKS的Provider是SUN,在每個版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4後我們都能夠直接使用它。

JCEKS在安全層級上要比JKS強,使用的Provider是JCEKS(推薦),尤其在保護KeyStore中的私密金鑰上(使用TripleDes)。

PKCS#12是公開金鑰加密標準,它規定了可包含所有私密金鑰、公開金鑰和認證。其以二進位格式儲存,也稱為 PFX 檔案,在windows中可以直接匯入到密鑰區,注意,PKCS#12的密鑰庫保護密碼同時也用於保護Key。

BKS 來自BouncyCastle Provider,它使用的也是TripleDES來保護密鑰庫中的Key,它能夠防止認證庫被不小心修改(Keystore的keyentry改掉1個 bit都會產生錯誤),BKS能夠跟JKS互操作,讀者可以用Keytool去TryTry。

UBER比較特別,當密碼是通過命令列提供的時候,它只能跟keytool互動。整個keystore是通過PBE/SHA1/Twofish加密,因此keystore能夠防止被誤改、察看以及校正。以前,Sun JDK(提供者為SUN)允許你在不提供密碼的情況下直接載入一個Keystore,類似cacerts,UBER不允許這種情況。

認證匯入
Der/Cer認證匯入:

要從某個檔案中匯入某個認證,使用keytool工具的-import命令:

keytool -import -file mycert.der -keystore mykeystore.jks

如果在 -keystore 選項中指定了一個並不存在的密鑰倉庫,則該密鑰倉庫將被建立。

如果不指定 -keystore 選項,則預設密鑰倉庫將是宿主目錄中名為 .keystore 的檔案。如果該檔案並不存在,則它將被建立。

建立密鑰倉庫時會要求輸入訪問口令,以後需要使用此口令來訪問。可使用-list命令來查看密鑰倉庫裡的內容:

keytool -list -rfc -keystore mykeystore.jks

 


P12格式認證匯入:

keytool無法直接匯入PKCS12檔案。

第一種方法是使用IE將pfx認證匯入,再匯出為cert格式檔案。使用上面介紹的方法將其匯入到密鑰倉庫中。這樣的話倉庫裡面只包含了認證資訊,沒有私密金鑰內容。


第二種方法是將pfx檔案匯入到IE瀏覽器中,再匯出為pfx檔案。
       新產生的pfx不能被匯入到keystore中,報錯:keytool錯誤: java.lang.Exception: 所輸入的不是一個 X.509 認證。新產生的pfx檔案可以被當作keystore使用。但會報個錯誤as unknown attr1.3.6.1.4.1.311.17.1,查了下資料,說IE匯出的就會這樣,使用Netscape就不會有這個錯誤.

第三種方法是將pfx檔案當作一個keystore使用。但是通過微軟的認證管理主控台產生的pfx檔案不能直接使用。keytool不認此格式,報keytool錯誤: java.io.IOException: failed to decrypt safe contents entry。需要通過OpenSSL轉換一下:

1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem

2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12

通過keytool的-list命令可檢查下密鑰倉庫中的內容:

keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12

這裡需要指明倉庫類型為pkcs12,因為預設的類型為jks。這樣此密鑰倉庫就即包含認證資訊也包含私密金鑰資訊。

P7B格式認證匯入:

keytool無法直接匯入p7b檔案。

需要將憑證鏈結RootServer.p7b(包含根憑證)匯出為根rootca.cer和子rootcaserver.cer 。

將這兩個認證匯入到可信任的密鑰倉庫中。

keytool -import -alias rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks

遇到是否信任該認證提示時,輸入y

keytool -import -alias rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks

 


總結:

1)P12格式的認證是不能使用keytool工具匯入到keystore中的

2)The Sun's PKCS12 Keystore對從IE和其他的windows程式產生的pfx格式的認證支援不太好.

3)P7B憑證鏈結不能直接匯入到keystore,需要將裡面的認證匯出成cer格式,再分別匯入到keystore。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.