기존 운영 환경에서 MySQL 접속 시 다음과 같은 설정을 사용하고 있었다.
spring:
datasource:
url: jdbc:mysql://host:3306/dbname?allowPublicKeyRetrieval=true&useSSL=false
이 설정은 개발 및 테스트 환경에서는 간편하지만, 운영 환경에서는 보안상 매우 위험한 옵션이다.
이 옵션은 클라이언트가 서버로부터 공개키를 요청해서 비밀번호 암호화를 가능하게 한다.
그러나 이 과정에서 중간자 공격(MITM)에 노출될 수 있어, 실제 운영 환경에서 패스워드가 탈취될 위험이 존재한다.
그래서 운영 환경에서는 공개키를 클라이언트에 동적으로 전달하는 방식은 피해야 하며, 안전한 연결 방법을 사용해야 한다.
✅ 변경 목적
✅ 변경 내용
allowPublicKeyRetrieval=true
제거옵션 | 설명 |
---|---|
useSSL=true | 클라이언트-서버 간 SSL/TLS 암호화 통신 사용 |
requireSSL=true | SSL 연결이 필수이며, 미지원 시 접속 거부 |
이 설정을 통해 비밀번호가 평문으로 노출되지 않고 암호화된 채 전송된다.
ssh -i <키페어> ec2-user@<EC2 퍼블릭 IP>
mysql -u root -p
SELECT user, host, plugin FROM mysql.user WHERE user = 'song';
caching_sha2_password
으로 되어있을 시 아래는 안해도 된다.
ALTER USER 'song'@'%' IDENTIFIED WITH caching_sha2_password BY 'your_password';
FLUSH PRIVILEGES;
allowPublicKeyRetrieval=true
는 운영 환경에서는 절대 사용 금지.caching_sha2_password
SSL 설정으로 보안 강화.