《2023年如何在Java处理PFX格式证书.docx》由会员分享,可在线阅读,更多相关《2023年如何在Java处理PFX格式证书.docx(8页珍藏版)》请在金锄头文库上搜索。
1、2023如何在Java处理PFX格式证书如何在Java处理PFX格式证书公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或效劳器私钥、公钥和证书指定了一个可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。开发人员通常须要将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为运用SSL通信的独立Java客户端或WebLogic Server运用在Security编程中,有几种典型的密码交换信息文件格式:DER-encoded certificate: .cer, .crtPEM-encoded
2、message: .pemPKCS#12 Personal Information Exchange: .pfx, .p12PKCS#10 Certification Request: .p10PKCS#7 cert request response: .p7rPKCS#7 binary message: .p7b.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。.pem跟crt/cer的区分是它以Ascii来表示。pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式p10是证书恳求p7r是CA对证书恳求的.回复,只用于导入p7b以树状展示证书链(certifi
3、cate chain),同时也支持单个证书,不含私钥。其中,我介绍如何从p12/pfx文件中提取密钥对及其长度:1,首先,读取pfx/p12文件(须要供给保护密码)2,通过别名(Alias,留意,全部证书中的信息项都是通过Alias来提取的)提取你想要分析的证书链3,再将其转换为一个以X509证书结构体4,提取里面的项,假设那你的证书项放在第一位(单一证书),干脆读取 x509Certs0(见下面的代码)这个X509Certificate对象5,X509Certificate对象有许多方法,tain198127网友希望读取RSA密钥(公私钥)及其长度(见 :/ matrix.org /thre
4、ad.shtmltopicId=43786&forumId=55&#reply),那真是太Easy了,X509Certificate keyPairCert = x509Certs0;int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert);System.out.println(&证书密钥算法=&+keyPairCert.getPublicKey().getAlgorithm();System.out.println(&证书密钥长度=&+iKeySize);提取了他所须要的信息。package org.de
5、v2dev.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;impo
6、rt 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
7、the keystore fileString pfxFileName = & c:david.turing.pfx & ;String pfxPassword = & 123456 & ;File fPkcs12 = null ;if (pfxFileName != null ) / Open the filefPkcs12 = new File(pfxFileName);FileInputStream fis = new FileInputStream(fPkcs12);/ Create a keystore objectKeyStore keyStore = null ;try/ Nee
8、d BC provider for PKCS #12, BKS and UBERif (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 Ex
9、ception( & Security Provider配置有误! & );try/ Load the file into the keystorekeyStore.load(fis, pfxPassword.toCharArray();catch (CertificateException ex)throw new Exception( & 证书格式问题! & );catch (NoSuchAlgorithmException ex)throw new Exception( & 算法不支持! & );catch (FileNotFoundException ex)throw new Exce
10、ption( & 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.orderX
11、509CertChain(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();本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第1页 共1页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页第 1 页 共 1 页