티스토리 뷰

반응형

💡 Tomcat SSLHandshakeException 오류 해결 후기 (JDK 버전 관련)

인수인계 받은 레거시 시스템 2개가 Windows Server에 있었으며 각각 서비스로 등록된 2개의 서비스중 하나의 Tomcat에서 SSLHandshakeException 오류가 발생했다.
당연히 같은 JDK(1.8.0_101)를 바라보고 있을줄 알았으나, 다른 JDK(1.8.0_045)를 바라보고 있었으며, 서비스 등록 방식의 특성을 몰라 한참을 헤맸다.


개요

  • 하나의 서버에 A, B 두 개의 Tomcat 인스턴스가 독립적으로 실행 중
  • 두 인스턴스 모두 catalina.bat, setenv.batJAVA_HOME = jdk1.8.0_101로 설정되어 있음
  • 하지만 A는 오류 발생, B는 정상 동작

증상

  • A 톰캣에서 외부 HTTPS API 요청 시 SSLHandshakeException 발생
  • catalina.out 로그에는 JDK 1.8.0_045가 사용 중인 것으로 확인됨
  • 반면, B 톰캣은 같은 설정인데도 JDK 1.8.0_101로 정상 동작
톰캣 인스턴스 JDK 버전 SSL 상태
A 톰캣 1.8.0_045 SSLHandshakeException 발생
B 톰캣 1.8.0_101 정상 동작

문제 분석

  • startup.bat, catalina.bat, setenv.bat 모두 JAVA_HOME = jdk1.8.0_101로 명시됨
  • version.bat 실행 시에도 정상적으로 1.8.0_101로 확인됨
  • 그런데도 A 톰캣은 여전히 1.8.0_045로 실행됨

왜 JDK 1.8.0_045에서 SSL 오류가 발생했을까?

  • JDK 1.8.0_045는 2015년 출시된 구버전
  • 최신 TLS 인증서 체인을 검증하기에 부족한 부분이 있음
    • 일부 루트/중간 인증서 미포함
    • 일부 TLS 1.2 cipher suite 미지원
    • 인증서 검증 로직이 현대 환경과 맞지 않음

원인

Tomcat이 Windows 서비스로 실행될 경우, 서비스 등록 시점의 JAVA_HOME을 따라감

  • service.bat install 수행 당시, 시스템의 JAVA_HOME1.8.0_045로 설정되어 있었음
  • 이후 setenv.bat, catalina.bat 등을 수정해도 서비스 등록 당시의 설정은 변경되지 않음
  • 즉, Windows 서비스로 등록된 Tomcat은 설정 파일보다 등록 당시의 환경 변수를 우선함

해결 방법

  1. 기존 톰캣 서비스 삭제
  2. service.bat remove
  3. 환경변수 또는 setenv.batJAVA_HOME을 1.8.0_101로 명시
  4. 톰캣 서비스 재등록
  5. service.bat install
  6. 톰캣 재시작 후 catalina.out 확인

OR

커맨드에서 톰캣이 설치된 bin 경로 .\tomcat8w.exe //ES//서비스네임을 실행하여 java tap에서 JDK 버전 변경


결과

  • A 톰캣1.8.0_101로 정상 인식
  • SSLHandshakeException 오류 사라짐

참고

  • 톰캣 서비스 등록 시점의 Java 환경 변수 영향
  • 톰캣이 서비스로 실행될 경우, 이후의 JAVA_HOME 설정은 반영되지 않음
반응형

'Java' 카테고리의 다른 글

Enum equals , ==  (0) 2024.04.11
Mac Java 버전 관리  (0) 2023.03.13
Windows OpenJdk 다운로드 및 설치  (0) 2022.10.21
Java 상위로 예외 넘기기 throws  (0) 2022.10.14
Java HMAC 암호화  (2) 2021.12.15