이야기박스
PKCS 공개키 암호 표준 ; InvalidKeySpecException 본문
반응형
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));
# 참고
반응형
'Computer & Data > Network' 카테고리의 다른 글
OSI 7 Layer, Why is it important? (0) | 2023.07.30 |
---|---|
로드밸런서 inline/dsr 모드 및 remote-addr 구하기 (0) | 2020.06.15 |
netty-grpc ssl 통신 인증 문제 (0) | 2018.09.07 |
tcp/ip 네트워크 스택 (0) | 2018.09.06 |
SSLProtocolException: handshake alert: unrecognized_name (0) | 2018.08.22 |