JKS,BKS,PKCS 12 인증서 간 전환

자주 사용 하 는 인증서 라 이브 러 리: 
JKS 와 JCEKS 는 자바 키 라 이브 러 리(KeyStore)의 두 가지 흔 한 유형 으로,JKS 의 Provider 는 SUN 으로 각 버 전의 JDK 에 있 으 며,JCEKS 의 Provider 는 SUNJCE 이 며,1.4 이후 에는 직접 사용 할 수 있다. 
JCEKS 는 JKS 보다 보안 수준 이 높 습 니 다.Provider 는 JCEKS(추천)를 사용 합 니 다.특히 KeyStore 의 비밀 키 를 보호 하 는 데(TripleDES 사용) 
PKCS\#12(PFX)는 모든 비밀 키,공개 키,인증 서 를 포함 할 수 있 는 공개 키 암호 화 표준 입 니 다.바 이 너 리 형식 으로 저 장 됩 니 다.windows 에서 키 영역 으로 직접 가 져 올 수 있 습 니 다.PKCS\#12 키 라 이브 러 리 보호 암 호 는 키 보호 에 도 사 용 됩 니 다. 
BKS 는 Bouncy CastleProvider 에서 왔 습 니 다.키 라 이브 러 리 의 Key 를 보호 하기 위해 TripleDES 를 사용 합 니 다.인증서 라 이브 러 리 가 실수 로 수정 되 는 것 을 방지 할 수 있 습 니 다. 
UBER 는 특히 암 호 를 명령 행 을 통 해 제공 할 때 keytool 과 만 대화 할 수 있 습 니 다.전체 keystore 는 PBE/SHA 1/Two fish 를 통 해 암호 화 되 어 있 기 때문에 keystore 는 오 류 를 방지 하고 관찰 하 며 검사 할 수 있 습 니 다.SunJDK 는 비밀 번 호 를 제공 하지 않 은 상태 에서 Keystore 를 직접 불 러 올 수 있 도록 해 줍 니 다.cacerts 와 같은 경우 UBER 는 이 를 허용 하지 않 습 니 다. 

/** * PFX JKS(Java Key Store) * @param pfxPassword PFX * @param pfxFilePath PFX * @param jksPassword JKS * @param jksFilePath JKS */ public static void covertPFXtoJKS(String pfxPassword, String pfxFilePath, String jksPassword, String jksFilePath) { FileInputStream fis = null; FileOutputStream out = null; try { // PFX KeyStore inputKeyStore = KeyStore.getInstance("PKCS12"); fis = new FileInputStream(pfxFilePath); char[] inPassword = pfxPassword == null ? null : pfxPassword .toCharArray(); char[] outPassword = jksPassword == null ? null : jksPassword .toCharArray(); inputKeyStore.load(fis, inPassword); KeyStore outputKeyStore = KeyStore.getInstance("JKS"); outputKeyStore.load(null, outPassword); Enumeration<String> enums = inputKeyStore.aliases(); while (enums.hasMoreElements()) { String keyAlias = enums.nextElement(); if (inputKeyStore.isKeyEntry(keyAlias)) { Key key = inputKeyStore.getKey(keyAlias, inPassword); Certificate[] certChain = (Certificate[]) inputKeyStore .getCertificateChain(keyAlias); outputKeyStore.setKeyEntry(keyAlias, key, pfxPassword.toCharArray(), (java.security.cert.Certificate[]) certChain); } } out = new FileOutputStream(jksFilePath); outputKeyStore.store(out, outPassword); } catch (Exception e) { e.printStackTrace(); } finally { try { if (fis != null) { fis.close(); } if (out != null) { out.close(); } } catch (Exception e) { e.printStackTrace(); } } } /** * JKS PKCS12 * @param jksFilePath String JKS * @param jksPasswd String JKS * @param pfxFilePath String PKCS12 * @param pfxPasswd String PKCS12 */ public void covertJSKToPFX(String jksFilePath, String jksPasswd, String pfxFolderPath, String pfxPasswd) throws Throwable { FileInputStream fis = null; try { KeyStore inputKeyStore = KeyStore.getInstance("JKS"); fis = new FileInputStream(jksFilePath); char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray(); char[] destPwd = pfxPasswd == null ? null : pfxPasswd.toCharArray(); inputKeyStore.load(fis, srcPwd); KeyStore outputKeyStore = KeyStore.getInstance("PKCS12"); Enumeration<String> enums = inputKeyStore.aliases(); while (enums.hasMoreElements()) { String keyAlias = (String) enums.nextElement(); System.out.println("alias=[" + keyAlias + "]"); outputKeyStore.load(null, destPwd); if (inputKeyStore.isKeyEntry(keyAlias)) { Key key = inputKeyStore.getKey(keyAlias, srcPwd); java.security.cert.Certificate[] certChain = inputKeyStore .getCertificateChain(keyAlias); outputKeyStore.setKeyEntry(keyAlias, key, destPwd, certChain); } String fName = pfxFolderPath + "_" + keyAlias + ".pfx"; FileOutputStream out = new FileOutputStream(fName); outputKeyStore.store(out, destPwd); out.close(); outputKeyStore.deleteEntry(keyAlias); } } finally { try { if (fis != null) { fis.close(); } } catch (Exception e) { e.printStackTrace(); } } } /** * BKS PKCS12 * * @param jksFilePath String JKS * @param jksPasswd String JKS * @param pfxFilePath String PKCS12 * @param pfxPasswd String PKCS12 */ public void covertBKSToPFX(String jksFilePath, String jksPasswd, String pfxFolderPath, String pfxPasswd) throws Throwable { FileInputStream fis = null; try { KeyStore inputKeyStore = KeyStore.getInstance("BKS", new org.bouncycastle.jce.provider.BouncyCastleProvider()); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); fis = new FileInputStream(jksFilePath); char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray(); char[] destPwd = pfxPasswd == null ? null : pfxPasswd.toCharArray(); inputKeyStore.load(fis, srcPwd); KeyStore outputKeyStore = KeyStore.getInstance("PKCS12"); Enumeration<String> enums = inputKeyStore.aliases(); while (enums.hasMoreElements()) { String keyAlias = (String) enums.nextElement(); System.out.println("alias=[" + keyAlias + "]"); outputKeyStore.load(null, destPwd); if (inputKeyStore.isKeyEntry(keyAlias)) { Key key = inputKeyStore.getKey(keyAlias, srcPwd); java.security.cert.Certificate[] certChain = inputKeyStore .getCertificateChain(keyAlias); outputKeyStore.setKeyEntry(keyAlias, key, destPwd, certChain); } String fName = pfxFolderPath + "_" + keyAlias + ".pfx"; FileOutputStream out = new FileOutputStream(fName); outputKeyStore.store(out, destPwd); out.close(); outputKeyStore.deleteEntry(keyAlias); } } finally { try { if (fis != null) { fis.close(); } } catch (Exception e) { e.printStackTrace(); } } } /** * JKS X509 * * @param jksFilePath * @param jksPasswd * @param algName */ public static void listAllCerts(String jksFilePath, String jksPasswd, String algName) { try { char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray(); FileInputStream in = new FileInputStream(jksFilePath); KeyStore ks = KeyStore.getInstance(algName); ks.load(in, srcPwd); Enumeration<String> e = ks.aliases(); while (e.hasMoreElements()) { String alias = e.nextElement(); java.security.cert.Certificate cert = ks.getCertificate(alias); if (cert instanceof X509Certificate) { X509Certificate X509Cert = (X509Certificate) cert; System.out.println("*********************************"); System.out.println(" :" + X509Cert.getVersion()); System.out.println(" :"+ X509Cert.getSerialNumber().toString(16)); System.out.println(" :" + X509Cert.getSubjectDN()); System.out.println(" :" + X509Cert.getIssuerDN()); System.out.println(" :" + X509Cert.getNotBefore()); System.out.println(" :" + X509Cert.getSigAlgName()); System.out.println(" :
"
+ X509Cert.toString()); System.out.println("**************************************");

} } } catch (Exception e) { e.printStackTrace(); } } /* * BKS X509 * @param jksFilePath * @param jksPasswd * @param algName */ public static void listAllCertsBks(String jksFilePath, String jksPasswd, String algName) { try { char[] srcPwd = jksPasswd == null ? null : jksPasswd.toCharArray(); FileInputStream in = new FileInputStream(jksFilePath); KeyStore ks = KeyStore.getInstance(algName, new org.bouncycastle.jce.provider.BouncyCastleProvider()); Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); ks.load(in, srcPwd); Enumeration<String> e = ks.aliases(); while (e.hasMoreElements()) { String alias = e.nextElement(); java.security.cert.Certificate cert = ks.getCertificate(alias); if (cert instanceof X509Certificate) { X509Certificate X509Cert = (X509Certificate) cert; System.out.println("*********************************"); System.out.println(" :" + X509Cert.getVersion()); System.out.println(" :" + X509Cert.getSerialNumber().toString(16)); System.out.println(" :" + X509Cert.getSubjectDN()); System.out.println(" :" + X509Cert.getIssuerDN()); System.out.println(" :" + X509Cert.getNotBefore()); System.out.println(" :" + X509Cert.getSigAlgName()); System.out.println(" :
"
+ X509Cert.toString()); System.out.println("**************************************"); } } } catch (Exception e) { e.printStackTrace(); } }


다음으로 이동:
JKS,BKS,PKCS 12 인증서 간 전환
http://pay.iteye.com/blog/1522784

좋은 웹페이지 즐겨찾기