프로그래밍 노트/트러블슈팅

[RSA] pem에서 RSA 개인키를 얻으려고할 때 InvalidKeySpecException

깡냉쓰 2018. 6. 15. 09:55
728x90
반응형

RSA 개인키 PEM문자열을 PrivateKey 객체로 변환할 때 exception이 났다.

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence

//PKCS#8 privateKey

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);       

KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey prkey = kf.generatePrivate(keySpec);​

(위 코드를 사용 했는데, exception을 내뱉음)

원인은 pem문자열이 pkcs#8형식으로 만들어지지 않았기 때문이었다. 

내가받은 pem 문자열은 pkcs#1형식이었어서 PKCS8EncodedKeySpec으로 keySpec을 얻은 후 privateKey를 얻으려고하면 오류가 나는 것이다.

해결 방법(PrivateKey를 얻으려면)은 pkcs#1형식의 pem 문자열을 pcks#8 형식의 pem 문자열로 보내달라고 하거나, pkcs#1의 keySpec을 얻을 수 있는 bouncyCastle 라이브러리를 사용해야한다. (bouncyCastle 라이브러리를 사용하지 않아도 얻을 수 있는 방법이 있지만, 매우 복잡하다....)

pem 문자열을 보고 이것이 pkcs#8 방식인지 pkcs#1방식인지 알아보려면 앞에 시작하는 문자열을 보면된다.

pkcs#8

-----BEGIN PRIVATE KEY-----

.....

.....

-----END PRIVATE KEY----- 

 

pkcs#1

-----BEGIN RSA PRIVATE KEY-----

....

....

-----END RSA PRIVATE KEY-----

728x90
반응형