반응형
MySQL에서 암호화된 통신(SSL/TLS)을 적용하려면 반드시 인증서가 필요하다.
MySQL은 OpenSSL을 기반으로 SSL 인증서를 생성하고 사용하는 방식을 지원하며,
서버와 클라이언트 모두 적절한 키와 인증서 파일을 갖추고 있어야 한다.
이번 글에서는 OpenSSL을 사용해 SSL 인증서를 직접 생성하고
MySQL에 적용하는 전 과정을 실습 형태로 정리한다.

✅ 준비물: 인증서 파일 3종
- ca.pem: 인증서 서명용 CA (인증기관) 인증서
- server-cert.pem / server-key.pem: MySQL 서버용 인증서와 개인키
- client-cert.pem / client-key.pem: 클라이언트용 인증서와 개인키
이 3가지 세트는 서버·클라이언트 모두에 적용되며,
공개키 기반 암호화를 통해 데이터 전송을 보호한다.
🛠️ 1단계: OpenSSL 설치 확인
리눅스 환경 기준으로 대부분 기본 설치되어 있음
openssl version
버전이 출력되면 설치 완료. 없을 경우 apt install openssl 또는 yum install openssl 명령으로 설치 가능.
반응형
🛠️ 2단계: CA 인증서 생성
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem
- ca-key.pem: 루트 키
- ca.pem: 루트 인증서
- Common Name은 MySQL CA 등으로 입력
🛠️ 3단계: 서버 인증서 생성
openssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-req.pem
openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
- server-key.pem: 서버 비밀키
- server-cert.pem: 서버용 공개 인증서
Common Name에는 서버 IP나 도메인을 입력
🛠️ 4단계: 클라이언트 인증서 생성
openssl req -newkey rsa:2048 -nodes -keyout client-key.pem -out client-req.pem
openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem
- 클라이언트용 인증서도 서버 인증서와 동일한 방식으로 생성
- 클라이언트에서도 Common Name은 구분 가능하게 설정
반응형
🛠️ 5단계: MySQL 서버 설정에 인증서 적용
my.cnf 또는 mysqld.cnf 설정 파일 수정
[mysqld]
ssl-ca = /etc/mysql/ssl/ca.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem
- 파일 경로는 환경에 따라 조정
- 파일 권한은 chmod 600으로 설정
- MySQL 재시작 필요
sudo systemctl restart mysql
🛠️ 6단계: 클라이언트에서 SSL 연결 확인
mysql -u root -p --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
접속 후 SSL 사용 여부를 확인
SHOW SESSION STATUS LIKE 'Ssl_version';
Ssl_version에 TLS 값이 출력되면 SSL 통신이 적용된 것이다.
🔐 실무 팁
- 인증서 유효기간은 충분히 길게 설정하되, 만료일은 반드시 관리
- 운영환경에서는 파일 접근 권한(0600) 유지 필수
- 인증서 자동 관리가 어렵다면 Let's Encrypt + 프록시 구성도 고려
- 클라이언트에 requireSSL=true 설정하지 않으면 실제 암호화가 되지 않는 경우도 있으니 주의
📘 공식 문서 참고
https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-certs.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] (복제구조3️⃣) GTID 기반 복제 완전 이해하기 (0) | 2025.07.16 |
|---|---|
| [MySQL] (복제구조2️⃣) Master-Slave 복제 설정 실습 가이드 (0) | 2025.07.16 |
| [MySQL] (복제구조1️⃣) MySQL 복제란? 구조와 개념 완전 정리 (0) | 2025.07.16 |
| [MySQL] (보안설정5️⃣) 실무에서 자주 놓치는 보안 설정 체크리스트 (0) | 2025.07.16 |
| [MySQL] (보안설정3️⃣) 데이터 in transit 암호화: 네트워크 구간 보안 설정법 (0) | 2025.07.16 |
| [MySQL] (보안설정2️⃣) 데이터 at rest 암호화 설정법: 테이블·디스크 암호화 실무 가이드 (0) | 2025.07.16 |
| [MySQL] (보안설정1️⃣) 데이터 암호화가 필요한 이유와 기본 개념 정리 (1) | 2025.07.16 |
| [MySQL] (트랜잭션 격리수준5️⃣) 실무에서 격리 수준 설정은 이렇게 한다 (1) | 2025.07.16 |