2017-05-17 1 views
-1

여기서 RunTime 동안 클라이언트 개인 키를 사용하여 키 저장소를 만들려고합니다. privateKey를 키 스토어에로드하는 중입니다.RSA 비공개 키를 사용하여 키 스토어 만들기

JKS 유형 :

clientKey=-----BEGIN RSA PRIVATE KEY----- ...-----END RSA PRIVATE KEY-----" 
KeyStore keyStore = KeyStore.getInstance("JKS"); 

keyStore.load(new ByteArrayInputStream(clientKey.getBytes()), "*********".toCharArray()); 

Exception: 
java.io.IOException: Invalid keystore format 
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658) 
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56) 
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224) 
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70) 

PKCS12 유형이 문제를 해결하기 위해

clientKey=-----BEGIN RSA PRIVATE KEY----- ...-----END RSA PRIVATE KEY-----" 

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
keyStore.load(new ByteArrayInputStream(clientKey.getBytes()), "*********".toCharArray()); 

Exception: 
java.io.IOException: toDerInputStream rejects tag type 45 
at sun.security.util.DerValue.toDerInputStream(DerValue.java:847) 
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1915) 
at java.security.KeyStore.load(KeyStore.java:1445) 

이 도와주세요.

+0

개인 키는 모든 형식의 키스톤이 아닙니다. 너가 묻고있는, 또는 시도하고있는 것이 명확하지 않은 이유, 또는 이것이 왜 효과가있을 것이라고 생각했는지. – EJP

답변

0

clientKey에는 시작 및 끝 헤더가 있습니다. 키를 제거한 다음 키를 해독하고 ByteArrayInputStream으로 보내야합니다.

당신은에 의해 -----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY----- 제거 할 수 있습니다

clientKey = clientKey.replace("-----BEGIN RSA PRIVATE KEY-----", ""); 
clientKey = clientKey.replace("-----END RSA PRIVATE KEY-----", ""); 

을 그리고 당신이 함께 남아있는 것은 Base64로 인코딩 형식 (PEM)입니다. base64로 인코딩 된 형식이 아닌 경우 인코딩 유형을 식별하고 디코딩해야합니다. Base64로 인코딩 된 경우 다음을 수행하여 디코딩 할 수 있습니다.

new ByteArrayInputStream(Base64.decode(clientKey)); // <-- clientKey here is without the headers. 
관련 문제