개발 메모장

[Java] HTTPS 통신 시 인증서 관련 오류(DH keypair) 본문

Java

[Java] HTTPS 통신 시 인증서 관련 오류(DH keypair)

yyyyMMdd 2024. 11. 5. 13:58
728x90
  • 카카오와 관련하여 어플리케이션을 사용하던 중 CI 값을 처리하는 부분을 변경해야해서 처리하던 중 발생한 오류입니다.

  • 기존의 코드는 Java Script에서 카카오에 유저 정보를 가져오게끔 처리 되어있었으나 10월 31일부로 더 이상 JS SDK로는 CI를 제공하지 않는다고 하여 REST API로 로직을 변경해야 했습니다.

  • 이 과정을 처리한 방법에 대해 작성해도록 하겠습니다.

#. HTTP 통신을 위한 로직 구현

 

  • API 정의서와 같이 로직을 구현하고 난 뒤 통신하려 하니 인증서 오류가 발생했습니다.
[org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler] 
Unexpected error occurred in scheduled task.
javax.net.ssl.SSLHandshakeException: 
sun.security.validator.ValidatorException: 
PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

 

 

[Java] keytool을 이용한 루트 인증서 등록(SSLHandshakeException)

[org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler] Unexpected error occurred in scheduled task.javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.Sun

ddyes.tistory.com


#. 통신 시 오류 발생

 

  • 로컬에선 아무 문제가 없어 서버에 적용해보니 아래와 같은 오류가 발생했습니다.
javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

 

  • 이 오류는 HTTPS 통신 연결 시 Java에서 발생하며 Diffie-Hellman 키 교환 프로세스에 문제가 발생한 경우입니다.

  • 보통 원인은 키 크기가 부족할 때 발생합니다.
728x90

#. 해결방안

 

1. 클라이언트 측 변경

  • 클라이언트 측에서 기본적으로 처리 가능한 것보다 서버측에서 보내는 키의 크기가 더 큰 경우

    - 이 경우엔 자바의 버전을 확인해볼 필요가 있습니다.

    - 수정하고자 하는 프로젝트의 자바버전은 1.7이였으며, 로컬에선 1.7 후반대를 사용하였고, 서버에선 1.7 초반대를 사용하고 있었습니다.

  • 위 설명과 같이 1.7에서도 차이가 있었고 로컬의 JDK를 서버로 옮겨 실행해보니 정상처리 되었습니다.

2. 서버 측 변경

  • DH 암호화 알고리즘에 대한 길이제한 허용 처리를 해줘야 합니다.

  • 또는 인증서에 DH파라미터를 추가하여 배포합니다.
-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL
/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC
-----END DH PARAMETERS-----

 

  • 서버 측 배포자가 아닌 API를 이용하는 클라이언트 입장에선 2번 방법은 불가능 하기에 1번 방법으로 처리하였습니다.

  • 워낙 낮은 버전을 사용하고 있다보니 마주하지 않을 만한 오류도 만나게 되었습니다.

  • 최근 만든 프로젝트에 자바 1.7 이하를 사용하는 분은 없을테니 마주하지 않을 에러 체험기였습니다.

 

 

 

===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!
===========================================================

728x90