Project

[Project] SSLHandshakeException

owls 2024. 7. 4. 16:16
728x90

 

SpringBoot 어플리케이션에서 DB와 연결하려고 할 때 에러가 발생했다.

원격에 MySQL 5.7 버전을 설치하였고

기존 테스트 로컬 환경은 MySQL8 버전이었다. 그렇기에 SpringBoot에 MySQL Connector 도 8버전으로 의존성 라이브러리가 설치되어 있다.

 

일단 원격지 서버와 SpringBoot어플리케이션 MySQL Connector에서 사용하는 버전이 다르다.

 

SSLHandshakeException이 발생하는 것은 일단 통신하고자 하는 두 프로그램의 TLS 및 SSL버전이 다르기 때문이다.

원격지 MySQL서버의 SSL/TLS버전을 확인해보자.

select @@version;

show global variables like 'tls_version';

MySQL 5.7.17버전이고, 

TLSv1,TLSv1.1을 지원하고 있다.

 

나는 Java 17을 사용하여 개발하였다. Java8버전 부터는 TSLv1.0과 TLSv1.1 이 더이상 지원하지 않은 비활성화 상태로 변경되었다고 한다.

그래서 TLSv1.2를 지원하지 않는 예전의 MySQL5.7버전 이하를 사용할 겨우 SSLHandshakeException이 발생하게 된다.

 

Connector버전을 5.7로 낮추고 실행해도 다른 문제가 추가로 발생했다. 

 

 

일단 문제가 무엇인지 알았으니 해당 문제를 비활성화했을 때 동작하는지 확인이 필요하다.

SSL/TLS접속을 비활성화 해보자.

spring.datasource.jdbc-url=jdbc:mysql://[IP]:3306/commerce?useSSL=false&....&allowPublicKeyRetrieval=true

useSSL=false & allowPublicKeyRetrieval=true

를 추가해서 SSL사용을 비활성화 한다.

 

동작이 잘된다.

SSL버전 문제가 맞았다.

 

하지만 SSL을 비활성화 모드로 바꾼다고 해당 문제를 제대로 해결한 것은 아니다.

임시 방편으로 돌아가는지 확인만 한 것이다.

 

운영 정책에서 SSL/TLS의 사용이 권장 또는 필수인 경우가 있다.

mysql 버전을 업그레이드 시켜야 할 것이다.

 

 

 

 

 

참고

 

https://intshc.tistory.com/57

 

https://medium.com/finda-tech/mysql%EA%B3%BC-ssl-tls%ED%86%B5%ED%95%9C-%EC%A0%91%EC%86%8D-15262c49783e

728x90