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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.