이야기박스

PKCS 공개키 암호 표준 ; InvalidKeySpecException 본문

Computer & Data/Network

PKCS 공개키 암호 표준 ; InvalidKeySpecException

박스님 2020. 6. 3. 17:02
반응형

 

netty 서버에 TLS 인증서 세팅을 하는 과정에서 다음 에러가 발생한 적이 있습니다.

Caused by: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
        at sun.security.ec.ECKeyFactory.engineGeneratePrivate(ECKeyFactory.java:169)
        at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
        at io.netty.handler.ssl.SslContext.getPrivateKeyFromByteBuffer(SslContext.java:1043)
        ... 9 more
Caused by: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
        at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:351)
        at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:356)
        at sun.security.ec.ECPrivateKeyImpl.<init>(ECPrivateKeyImpl.java:73)
        at sun.security.ec.ECKeyFactory.implGeneratePrivate(ECKeyFactory.java:237)
        at sun.security.ec.ECKeyFactory.engineGeneratePrivate(ECKeyFactory.java:165)

 

Netty 서버 구성에서 필요한 PKCS 표준과 맞지 않기 때문에 발생한 에러였습니다.

제가 가지고 있는 key 파일은 [PKCS #1 RSA 암호 표준]을 사용하고 있었습니다.

-----BEGIN RSA PRIVATE KEY-----
{{ key }}
-----END RSA PRIVATE KEY-----


Netty 서버에 적용하기 위해서는 [PKCS #8]으로 변경이 필요하여 다음 명령어로 변경을 하게 되었습니다.

openssl pkcs8 -topk8 -inform PEM -outform PEM -in filename -out filename -nocrypt

 

아래는 변경된 key 포맷입니다.

-----BEGIN PRIVATE KEY-----
{{ key }}
-----END PRIVATE KEY-----

 

서버 생성에 사용된 코드를 첨부합니다.

NettyServerBuilder builder = NettyServerBuilder.forPort(servicePort)
                                               .useTransportSecurity(
                                                   MyNettyServer.class.getResourceAsStream("/my_crt.pem"),
                                                   MyNettyServer.class.getResourceAsStream("/my_key.pem"))
                                               .executor(Executors.newFixedThreadPool(threadPool));

 

 

# 참고

PKCS 공개키 암호 표준 - 티스토리 블로그

 

PKCS 공개키 암호 표준

PKCS(Public key Cryptography Standard) 공개키 기반구조(PKI)에서 인터넷을 이용해 안전하게 정보를 교환하기 위한 제조사간 프로토콜로 RSA가 개발한 암호 작성 시스템 PKCS #1 RSA Cryptography Standard Vers..

hsunnystory.tistory.com

 

반응형