<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 如何在Java處理PFX格式證書

    時間:2024-08-02 16:08:04 SUN認證 我要投稿
    • 相關推薦

    如何在Java處理PFX格式證書

      公鑰加密技術12號標準(Public Key Cryptography Standards #12,PKCS#12)為存儲和傳輸用戶或服務器私鑰、公鑰和證書指定了一個可移植的格式。它是一種二進制格式,這些文件也稱為PFX文件。

      開發人員通常需要將PFX文件轉換為某些不同的格式,如PEM或JKS,以便可以為使用SSL通信的獨立Java客戶端或WebLogic Server使用

      在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);

      提取了他所需要的信息。

      package org.dev2dev.client.keypair;

      import java.io.File;

      import java.io.FileInputStream;

      import java.io.FileNotFoundException;

      import java.io.IOException;

      import java.security.KeyStore;

      import java.security.KeyStoreException;

      import java.security.NoSuchAlgorithmException;

      import java.security.NoSuchProviderException;

      import java.security.Security;

      import java.security.cert.Certificate;

      import java.security.cert.CertificateException;

      import java.security.cert.X509Certificate;

      import org.dev2dev.security.keytool.X509CertUtil;

      public class LoadKeyFromPKCS12 {

      public static void main(String[] args) {

      try {

      // Open an input stream on the keystore file

      String pfxFileName = " c:\\david.turing.pfx " ;

      String pfxPassword = " 123456 " ;

      File fPkcs12 = null ;

      if (pfxFileName != null ) {

      // Open the file

      fPkcs12 = new File(pfxFileName);

      }

      FileInputStream fis = new FileInputStream(fPkcs12);

      // Create a keystore object

      KeyStore keyStore = null ;

      try

      {

      // Need BC provider for PKCS #12, BKS and UBER

      if (Security.getProvider( " BC " ) == null )

      {

      throw new Exception( " 不能Load入BouncyCastle! " );

      }

      keyStore = KeyStore.getInstance( " PKCS12 " , " BC " );

      }

      catch (KeyStoreException ex)

      {

      throw new Exception( " 不能正確解釋pfx文件! " );

      }

      catch (NoSuchProviderException ex)

      {

      throw new Exception( " Security Provider配置有誤! " );

      }

      try

      {

      // Load the file into the keystore

      keyStore.load(fis, pfxPassword.toCharArray());

      }

      catch (CertificateException ex)

      {

      throw new Exception( " 證書格式問題! " );

      }

      catch (NoSuchAlgorithmException ex)

      {

      throw new Exception( " 算法不支持! " );

      }

      catch (FileNotFoundException ex)

      {

      throw new Exception( " pfx文件沒找到 " );

      }

      catch (IOException ex)

      {

      throw new Exception( " 讀取pfx有誤! " );

      }

      // 獲取我的證書鏈的中keyEntry的別名

      Certificate[] certs = keyStore.getCertificateChain( " david.turing " );

      X509Certificate[] x509Certs = X509CertUtil.convertCertificates(certs);

      if (x509Certs == null )

      {

      return ;

      }

      x509Certs = X509CertUtil.orderX509CertChain(x509Certs);

      X509Certificate keyPairCert = x509Certs[ 0 ];

      int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert);

      System.out.println( " 證書密鑰算法= " + keyPairCert.getPublicKey().getAlgorithm());

      System.out.println( " 證書密鑰長度= " + iKeySize);

      } catch (Exception e) {

      e.printStackTrace();

      }

      }

      }

    【如何在Java處理PFX格式證書】相關文章:

    Java中日期的處理方法09-03

    java證書的加密與解密代碼06-12

    用Java如何處理XML數據10-22

    如何在PHP中處理Protocol Buffers數據08-29

    java與javascript之間json格式數據互轉詳解06-20

    sun認證java關于字符串處理技巧06-01

    Java與Java web的區別08-10

    營銷管理的意義何在10-17

    java習題及答案10-25

    學習java技巧09-23

    主站蜘蛛池模板: 2021久久国自产拍精品| 国产成人精品一区二区秒拍| 国产午夜福利精品久久| 国产精品自在线拍国产电影| 精品一区二区三区免费视频 | 精品无码久久久久久久动漫| 亚洲国产精品SSS在线观看AV| 91精品国产麻豆国产自产在线| 无码少妇精品一区二区免费动态| 国产高清日韩精品欧美激情| 久久99国产综合精品免费| 午夜精品久久久内射近拍高清| 国产成人精品久久综合| 成人午夜精品视频在线观看| 少妇人妻精品一区二区三区| 久久夜色撩人精品国产| 国产精品污WWW一区二区三区| 国产精品久久免费| 国产欧美精品AAAAAA片| 亚洲高清国产拍精品青青草原| 国产精品亚洲欧美大片在线看 | 无码人妻精品中文字幕免费| 精品久久久久久无码人妻热| 在线观看日韩精品| 999精品视频| 精品久久久久久成人AV| 亚洲精品无码AV人在线播放| 欧美精品亚洲精品日韩专区 | 99热在线日韩精品免费| 日产精品久久久久久久性色| 人妻无码精品久久亚瑟影视| 黑人巨茎精品欧美一区二区| www夜片内射视频日韩精品成人| 免费精品99久久国产综合精品 | 在线精品无码字幕无码AV| 热久久国产欧美一区二区精品 | 久久99国产精品久久99| 97久久精品国产精品青草| 2022精品天堂在线视频| 国产精品特级毛片一区二区三区| 精品偷自拍另类在线观看|