中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      如何在Java處理PFX格式證書

      時(shí)間:2024-08-02 16:08:04 SUN認(rèn)證 我要投稿
      • 相關(guān)推薦

      如何在Java處理PFX格式證書

        公鑰加密技術(shù)12號(hào)標(biāo)準(zhǔn)(Public Key Cryptography Standards #12,PKCS#12)為存儲(chǔ)和傳輸用戶或服務(wù)器私鑰、公鑰和證書指定了一個(gè)可移植的格式。它是一種二進(jìn)制格式,這些文件也稱為PFX文件。

        開發(fā)人員通常需要將PFX文件轉(zhuǎn)換為某些不同的格式,如PEM或JKS,以便可以為使用SSL通信的獨(dú)立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進(jìn)制形式存放的,不含私鑰。

        .pem跟crt/cer的區(qū)別是它以Ascii來(lái)表示。

        pfx/p12用于存放個(gè)人證書/私鑰,他通常包含保護(hù)密碼,2進(jìn)制方式

        p10是證書請(qǐng)求

        p7r是CA對(duì)證書請(qǐng)求的回復(fù),只用于導(dǎo)入

        p7b以樹狀展示證書鏈(certificate chain),同時(shí)也支持單個(gè)證書,不含私鑰。

        其中,我介紹如何從p12/pfx文件中提取密鑰對(duì)及其長(zhǎng)度:

        1,首先,讀取pfx/p12文件(需要提供保護(hù)密碼)

        2,通過(guò)別名(Alias,注意,所有證書中的信息項(xiàng)都是通過(guò)Alias來(lái)提取的)提取你想要分析的證書鏈

        3,再將其轉(zhuǎn)換為一個(gè)以X509證書結(jié)構(gòu)體

        4,提取里面的項(xiàng),如果那你的證書項(xiàng)放在第一位(單一證書),直接讀取 x509Certs[0](見下面的代碼)這個(gè)X509Certificate對(duì)象

        5,X509Certificate對(duì)象有很多方法,tain198127網(wǎng)友希望讀取RSA密鑰(公私鑰)及其長(zhǎng)度(見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("證書密鑰長(zhǎng)度="+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( " 證書格式問(wèn)題! " );

        }

        catch (NoSuchAlgorithmException ex)

        {

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

        }

        catch (FileNotFoundException ex)

        {

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

        }

        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( " 證書密鑰長(zhǎng)度= " + iKeySize);

        } catch (Exception e) {

        e.printStackTrace();

        }

        }

        }

      【如何在Java處理PFX格式證書】相關(guān)文章:

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

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

      用Java如何處理XML數(shù)據(jù)10-22

      如何在PHP中處理Protocol Buffers數(shù)據(jù)08-29

      java與javascript之間json格式數(shù)據(jù)互轉(zhuǎn)詳解06-20

      sun認(rèn)證java關(guān)于字符串處理技巧06-01

      Java與Java web的區(qū)別08-10

      營(yíng)銷管理的意義何在10-17

      java習(xí)題及答案10-25

      學(xué)習(xí)java技巧09-23

      主站蜘蛛池模板: 91精品人妻一区二区三区蜜臀 | 亚洲一区亚洲二区亚洲三区| 亚洲青青草视频免费观看| 成在线人免费无码高潮喷水| 国内精品少妇高潮在线看男男| 亚洲va欧美va人人爽夜夜嗨| 热re99久久精品国产66热6| 92精品国产自产在线观看48页| 男女互操视频网站在线观看| 免费一级黄色大片久久久| 溆浦县| 蒲城县| 江华| 亚洲av色在线观看网站| mm在线精品视频| 亚洲AV专区一专区二专区三| 中文字幕亚洲综合久久| 一级做a爱视频在线播放| 狠狠色丁香婷婷久久综合2021| 99熟妇人妻精品一区五一看片 | 视频一区二区三区中文字幕狠狠| 精品国产自拍在线视频| 婷婷激情五月综合在线观看| 色综合久久三十路人妻蜜臀av| 日本最新一区二区三区免费看| av最新版天堂在资源在线| 少妇高潮无码自拍| 国产一区二区三区导航| 日韩国产欧美成人一区二区影院| 亚洲综合一| 亚洲一道一本快点视频| 东京热加勒比一区四区| 日本久久久精品视频视频| 日本护士一区二区三区高清热线| 色优网久久国产精品| 男人的天堂av网站一区二区| 日韩中文字幕精品免费一区| 操B小视频国产| 少妇被粗大猛进进出出| 国产三级在线看完整版| 淫欲一区二区中文字幕|