250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- ORM
- Stream
- QueryDSL
- MessageQueue
- DevOps
- java
- 그리드
- mssql
- docker
- JPA
- mom
- Jenkins
- sqlserver
- 자바8
- ci/cd
- 보안
- jqGrid
- 대용량 업로드
- 스트림
- poi
- spring
- stream api
- 제이쿼리그리드
- 자동빌드
- rabbitmq
- JQuery
- 자동배포
- 엑셀 업로드
- apache.poi
- Javascript
Archives
- Today
- Total
개발 메모장
[Java] HTTPS 통신 시 인증서 관련 오류(DH keypair) 본문
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에 인증서를 등록해야 합니다.
- 필자의 경우 로컬에도 java 버전이 많고, 서버로 사용하는 곳에서도 많아 조금 헷갈렸습니다..
[Java] keytool을 이용한 루트 인증서 등록(SSLHandshakeException)
[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
'Java' 카테고리의 다른 글
[Java] 공공데이터 - IP 확인 API 사용하기 (0) | 2025.03.06 |
---|---|
[Java] 함수형 인터페이스(Functional Interface) (0) | 2024.06.13 |
[Java] keytool을 이용한 루트 인증서 등록(SSLHandshakeException) (0) | 2024.04.18 |
[Java] Apache.POI 엑셀 업로드 구현 - DB 처리(3/3) (1) | 2024.01.05 |
[Java] Apache.POI 엑셀 업로드 구현 - Controller(2/3) (2) | 2024.01.04 |