Oh My God....
Spring 프로젝트를 너무 간만에 첫 세팅하나보다.
예상치 못한 에러가 나더이다....
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
.
.
.
이게 무슨 에러인가? MySQL로는 간만에 Spring을 세팅하는 거라 당황 하였다.
MySQL 8.0
버전부터는 보안적인 것이 더 강화된 것 같다.
MySQL 공식사이트에서 보안 상의 이유로 allowPublicKeyRetrieval
옵션이 있다고 한다. 이 설정은 말 그대로 공개키 검색을 허용하는 설정으로 보인다. MySql 공식사이트에서 MITM 공격을 방어하기 위해 해당 디폴트 옵션값을 false
로 지정한 것
하지만 에러 로그를 보면.... 'Public Key의 검색이 허용되지 않았다' 는 것이다.
따라서 이 값을 True
로 변경해주면 해결이 될 것으로 보인다.(보안적으로는 덜 안전한 것 같다.)
중간자 공격(MITM: Man In The Middle)
공격자가 사용자의 인터넷 서버와 해당 인터넷 트래픽의 목적지 사이에 끼어들어 데이터 전송을 가로채는 공격
아래와 같이 application.yml 파일의 spring.datasource.url
값에 allowPublicKeyRetrieval=true
를 추가해 준다.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?allowPublicKeyRetrieval=true
username: root
password:
일단, 해당 에러에 대한 해결을 한 듯 하다.
Mysql에서 8.0으로 업그레이드 하면서 보안적인 부분을 강화한 것으로 알고 있었다.
지금은 개인 프로젝트를 하고 있는 상황이라 해당 에러를 빠르게 제거하고 싶은 상황에 적합한 해결방법으로 생각된다.
하지만 실제 서비스 환경이라면 어떤 설정을 하는 것이 더 나을지 고민해봐야 할 부분인 것 같다.
갈수록 보안은 아무리 강조해도 지나치지 않다. 지금 당장 에러 해결에 기뻐하지 말고 default설정을 유지하는 방법을 꼭 알아보도록 하자.
[출처]