우당탕 개발일지

[Mysql Jdbc] Public Key Retrieval is not allowed 해결 본문

기술/Java

[Mysql Jdbc] Public Key Retrieval is not allowed 해결

럽모네 2024. 2. 3. 20:32

배포 진행 중 당혹스러운 아래와 같은 에러를 발견했습니다.

 

Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed
	at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(Unknown Source) ~[?:?]
	at java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source) ~[?:?]
	at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62) ~[mysql-connector-j-8.0.33.jar:8.0.33]
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:86) ~[mysql-connector-j-8.0.33.jar:8.0.33]
	at com.mysql.cj.protocol.a.authentication.Sha256PasswordPlugin.nextAuthenticationStep(Sha256PasswordPlugin.java:140) ~[mysql-connector-j-8.0.33.jar:8.0.33]

 

원인

 

Mysql 8.0 버전부터는 jdbc 드라이버의 ssl 설정 보안이 엄격하게 변경되었습니다.

따라서 SSL 관련된 인증 설정 정보에 대해서 명시적으로 지정하여 설정해야 합니다.

 

해결방법

 

jdbc url 에 useSSl , allowPublicKeyRetrieval 를 추가해줘야 합니다.

useSSL=false&allowPublicKeyRetrieval=true

 

2개의 설정 정보는 아래와 같습니다.

allowPublicKeyRetrieval : 공개키를 검색할 수 없도록 하는 설정. true 인 경우 클라이언트가 서버의 공개키를 검색할 수 있도록 허용

useSSL : jdbc 연결을 SSL 로부터 보호할지 여부. default 는 false