2012-06-14 6 views
2

자바 클래스 CertAndKeyGen과 X500Name을 사용하여 만든 인증서가 있으며 바이트 배열의 인증서를 생성 할 수 있습니다. 이제 인증서에 사용한 개인 키를 읽고 읽을 수있는 형식으로 변환합니다. 아래는 내가 아무 단서도 없어 한자바에서 개인 키 추출하기

CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null); 
    X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country); 
    keypair.generate(keysize); 
    PrivateKey privKey = keypair.getPrivateKey(); 
    PKCS10 certReq = keypair.getCertRequest(x500Name); 
    X509Certificate[] chain = new X509Certificate[1]; 
    chain[0] = keypair.getSelfCertificate(x500Name, new Date(), (long) validity * 24 * 60 * 60); 
    keyStore.setKeyEntry(alias, privKey, keyStorePassword.toCharArray(), chain);      
    ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
    PrintStream ps = new PrintStream(bs); 
    certReq.print(ps); 
    byte[] certReqPrintable = bs.toByteArray(); 

내가 인증서를 만드는 데 사용되는 코드입니다, 개인 키를 얻을 읽을 수있는 형식으로 변환하기 위해 올바른 방향으로 가고 저를 도와주세요. 미리 감사드립니다.

+3

당신이 읽을 수 무엇을 의미합니까? Base64? – Anton

+0

바이너리 형식이되고 싶지 않습니다. 인쇄 할 경우 개인 키가 표시됩니다.이 키는 항상 읽을 수없는 바이너리 형식으로 제공합니다. – Mojoy

답변

1

당신이 (진) 형식으로 인코딩 된 DER의 키를 반환

byte[] privateKeyBytes = privKey.getEncoded(); 

사용하는 파일에 개인 키를 저장합니다.

이 경우 당신은 콘솔이 단지 toString()를 사용하여 인쇄에 단지 포함 된 값을 표시하려면 :

System.out.println(privKey); 
+0

안녕하세요,이 스레드로 나를 도울 수 있습니까? http://stackoverflow.com/q/18375813/1503130 – Prateek

1

BouncyCastle은 파일에 개인 키를 작성하는 데 사용할 수있는 유용한 PEMWriter 클래스가 PEM 형식으로 (이것은 OpenSSH와 curl이 기대하는 도구입니다).

그렇지 않으면 많은 도구에서 사용되는 DER 형식 인 개인 키에서 바이트 배열을 저장할 수 있습니다.

마지막으로 당신은이를 사용하여 다른 자바 프로그램을 사용하는 JKS 키 저장소에 쓸 수 :

KeyStore keyStore = KeyStore.getInstance("JKS"); 
keyStore.load(null); 
keyStore.setKeyEntry("some alias", privKey, somePassword.toCharArray(), chain[0])); 
FileOutputStream fos = new FileOutputStream(filename); 
keyStore.store(fos, somePassword.toCharArray()); 
fos.close();