본문 바로가기
Languages

Spring Framework-Error: Public Key Retrieval is not allowed

by lucidiz 2023. 4. 3.
반응형

Spring Framework 환경의 "Public Key Retrieval is not allowed" 에러가 발생했을 때 대응방법을 알려드리겠습니다. 

 

우선, 이 에러에 대해서 상세히 설명드리겠습니다.

 

"Public Key Retrieval is not allowed" 에러는 일반적으로 Java 애플리케이션이 MySQL 데이터베이스와 연결을 시도할 때 발생합니다. 이 에러는 MySQL 8 이상 버전에서 새롭게 추가된 보안 기능으로 인해 발생하는데, 이전 버전의 MySQL과 호환되지 않는 일부 변경 사항이 있습니다.

MySQL 8 이상 버전에서는 SSL/TLS 연결을 사용하는 경우 공개 키 검색을 활성화하는 것이 권장됩니다. 이를 위해서는 'allowPublicKeyRetrieval=true' 속성을 JDBC URL에 추가해야 합니다. 그러나 이 속성을 추가하더라도 "Public Key Retrieval is not allowed" 에러가 발생하는 경우, MySQL 서버 구성에서 public_key_path 설정이 잘못 구성되었을 가능성이 있습니다.

따라서, 이 에러를 해결하려면 다음과 같은 단계를 수행할 수 있습니다.

 

  1. JDBC URL에 'allowPublicKeyRetrieval=true' 속성 추가
  2. MySQL 서버 구성에서 'public_key_path' 설정 확인 및 수정
  3. MySQL 클라이언트 드라이버를 최신 버전으로 업데이트

이러한 단계를 수행해도 문제가 해결되지 않는 경우, 보다 자세한 로그 메시지나 스택 트레이스를 참조하여 추가적인 문제 해결 작업을 수행할 수 있습니다.

 

저의 경우는 JDBC URL에 "allowPublicKeyRetrieval=true" 속성을 추가하는 것으로 해결되었습니다.

 

<오류 내용>

 

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110) ~[mysql-connector-java-8.0.28.jar:8.0.28]
 
java .sql .SQLNonTransientConnectionException

<오류 해결 방법>

'application.properties'에서 "allowPublicKeyRetrieval=true"을 아래와 같이 추가해 주면 됩니다.

 

spring.datasource.url=jdbc:mysql ~ ?
allowPublicKeyRetrieval=true
 

 

또 다른 해결 방법인 MySQL 서버 구성에서 'public_key_path' 설정 확인 및 수정하는 방법을 알려드리면 다음과 같습니다.

 

MySQL 서버에서 'public_key_path'는 SSL/TLS 암호화를 위한 공개키 경로를 지정합니다. 이 설정은 MySQL 5.7.6 버전 이후에 추가되었으며, MySQL 서버를 보안하는 데 중요한 역할을 합니다.

'public_key_path' 설정을 확인하려면 다음 단계를 따르세요.

1. MySQL 서버에 로그인합니다.
2. MySQL 클라이언트를 엽니다.
3. 다음 쿼리를 실행합니다.

 

SHOW VARIABLES LIKE 'public_key_path';

 

이 쿼리는 현재 'public_key_path' 설정 값을 반환합니다.

'public_key_path' 설정을 수정하려면 다음 단계를 따르세요.

1. MySQL 서버에 로그인합니다.
2. MySQL 클라이언트를 엽니다.
3. 다음 쿼리를 실행합니다.

 

SET GLOBAL public_key_path='/new/path/to/public/key';

 

위의 쿼리에서 '/new/path/to/public/key'는 새로운 공개키 파일 경로를 나타냅니다. 이 경로는 SSL/TLS 암호화를 위한 공개키 파일이 저장된 경로여야 합니다.

또는 my.cnf 파일을 수정하여 'public_key_path' 설정을 변경할 수도 있습니다. 다음 단계를 따르세요.

1. MySQL 서버에 로그인합니다.
2. my.cnf 파일을 엽니다.

 

sudo nano /etc/mysql/my.cnf

 

3. [mysqld] 섹션에 다음 설정을 추가합니다.

 

public_key_path=/new/path/to/public/key

 

4. 파일을 저장하고 종료합니다.

 

이제 MySQL 서버가 새로운 공개키 파일 경로를 사용하도록 설정되었습니다.

 

 

반응형