운영 서버에서 allowPublicKeyRetrieval=true 제거 및 보안 설정 변경

송현진·2025년 4월 3일
0

Spring Boot

목록 보기
5/23

⚠️ 문제 상황

기존 운영 환경에서 MySQL 접속 시 다음과 같은 설정을 사용하고 있었다.

spring:
  datasource:
    url: jdbc:mysql://host:3306/dbname?allowPublicKeyRetrieval=true&useSSL=false

이 설정은 개발 및 테스트 환경에서는 간편하지만, 운영 환경에서는 보안상 매우 위험한 옵션이다.

❓ 왜 allowPublicKeyRetrieval=true가 보안에 취약한가?

이 옵션은 클라이언트가 서버로부터 공개키를 요청해서 비밀번호 암호화를 가능하게 한다.

그러나 이 과정에서 중간자 공격(MITM)에 노출될 수 있어, 실제 운영 환경에서 패스워드가 탈취될 위험이 존재한다.

그래서 운영 환경에서는 공개키를 클라이언트에 동적으로 전달하는 방식은 피해야 하며, 안전한 연결 방법을 사용해야 한다.

🔄 해결 및 변경 사항

변경 목적

  • 운영 환경의 민감 정보 보호
  • 인증과 통신의 보안 강화

변경 내용

  • allowPublicKeyRetrieval=true 제거
  • 인증 플러그인을 caching_sha2_password로 일관되게 통일
  • SSL 설정 추가
옵션설명
useSSL=true클라이언트-서버 간 SSL/TLS 암호화 통신 사용
requireSSL=trueSSL 연결이 필수이며, 미지원 시 접속 거부

이 설정을 통해 비밀번호가 평문으로 노출되지 않고 암호화된 채 전송된다.

🛠️ SSH를 통한 MySQL 사용자 인증 방식 변경 방법

1. EC2 접속

ssh -i <키페어> ec2-user@<EC2 퍼블릭 IP>

2. MySQL 접속

mysql -u root -p

3. 사용자 플러그인 확인

SELECT user, host, plugin FROM mysql.user WHERE user = 'song';

caching_sha2_password으로 되어있을 시 아래는 안해도 된다.

4. 플러그인 일관성 있게 변경

ALTER USER 'song'@'%' IDENTIFIED WITH caching_sha2_password BY 'your_password';
FLUSH PRIVILEGES;

📝 배운점

  • allowPublicKeyRetrieval=true는 운영 환경에서는 절대 사용 금지.
  • 대신 caching_sha2_password SSL 설정으로 보안 강화.
  • 운영 서버 보안 설정은 개발 편의성보다 정보 보호를 우선으로 고려해야 함.
profile
개발자가 되고 싶은 취준생

0개의 댓글