[Mysql] Public key retrieval is not allowed 에러 해결

보라보라·2024년 3월 1일
0
post-thumbnail

Oh My God....
Spring 프로젝트를 너무 간만에 첫 세팅하나보다.
예상치 못한 에러가 나더이다....

환경 :

  • Spring Boot 3.2.2
  • Jpa Hibernate
  • MySQL : 8.0.x

상상치 못한 에러

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)
공격자가 사용자의 인터넷 서버와 해당 인터넷 트래픽의 목적지 사이에 끼어들어 데이터 전송을 가로채는 공격

해결 방법

접속 URL에 속성 추가

아래와 같이 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설정을 유지하는 방법을 꼭 알아보도록 하자.


[출처]

profile
쉽게쓰려고 노력하는 블로그

0개의 댓글