티스토리 뷰
반응형
💡 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.bat
에JAVA_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_HOME
이1.8.0_045
로 설정되어 있었음- 이후
setenv.bat
,catalina.bat
등을 수정해도 서비스 등록 당시의 설정은 변경되지 않음 - 즉, Windows 서비스로 등록된 Tomcat은 설정 파일보다 등록 당시의 환경 변수를 우선함
해결 방법
- 기존 톰캣 서비스 삭제
service.bat remove
- 환경변수 또는
setenv.bat
에JAVA_HOME
을 1.8.0_101로 명시 - 톰캣 서비스 재등록
service.bat install
- 톰캣 재시작 후
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 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- sse vs websocket
- no `meta.properties` found in
- SpringBatch 5.1.1
- kafka redis
- Enum ==
- Enum equals
- 프라이빗 저장소
- tomcat gzip
- spring redis cache
- spring security
- kafka oubox
- spring boot gzip
- 업비트 웹소켓
- codecommit repository
- AWS 클라우드 환경
- spring boot jpa crud
- Enum Equals ==
- JdbcBatchItem
- spring boot jpa
- redis cache
- oubox pattern
- Spring Actuator
- spring boot redis cache
- actuator prometheus grafana
- nginx gzip
- CompositeItemWriter
- Spring boot Actuator
- kafka srping event
- 업비트 웹소켓 자바
- custom Item writer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함