프로그래밍 노트/트러블슈팅
[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
반응형