한줄공지
  • 등록된 공지내용이 없습니다.

MySQL TLS/SSL 오류 완벽 해결 가이드 (TLS/SSL error: self-signed certificate in certificate chain)

2025년 9월 12일
조회수 10
코멘트 0

목차

개발자라면 한 번쯤 마주치게 되는 MySQL 연결 오류 중 하나가 바로 TLS/SSL 관련 오류입니다. 특히 Docker 환경이나 원격 MySQL 서버에 연결할 때 자주 발생하는 이 문제를 깔끔하게 해결해보겠습니다.

🚨 문제 상황

root@6eaecc11c297:/var/www/html# mysql -h172.18.0.1 -ublog -p
Enter password: 
ERROR 2026 (HY000): TLS/SSL error: self-signed certificate in certificate chain

이런 오류 메시지를 보신 적 있으신가요? 분명 비밀번호도 맞게 입력했는데 연결이 거부되는 상황입니다.

왜 이런 오류가 발생할까요?

  1. MySQL 8.0의 기본 정책 변화
    • MySQL 8.0부터는 기본적으로 SSL 연결을 강제합니다
    • 보안 강화를 위한 조치이지만, 개발 환경에서는 불편함을 초래합니다
  2. 자체 서명 인증서(Self-signed Certificate)
    • MySQL 서버가 자체 서명된 SSL 인증서를 사용
    • 클라이언트가 이 인증서를 신뢰하지 않아 연결 거부
  3. Docker 네트워크 환경
    • 컨테이너 간 통신에서 SSL 설정이 복잡해질 수 있음

⚡ 빠른 해결책

방법 1: 일회성 SSL 비활성화

가장 간단한 방법입니다. 연결할 때마다 SSL을 비활성화하는 옵션을 추가합니다.

# 방법 1: --ssl-mode=DISABLED 사용
mysql -h172.18.0.1 -ublog -p --ssl-mode=DISABLED

# 방법 2: --ssl=0 사용
mysql -h172.18.0.1 -ublog -p --ssl=0

# 방법 3: --skip-ssl 사용
mysql -h172.18.0.1 -ublog -p --skip-ssl

# 방법 4: --disable-ssl 사용
mysql -h172.18.0.1 -ublog -p --disable-ssl

방법 2: SSL 인증서 검증 우회

SSL은 사용하되 인증서 검증만 우회하는 방법입니다.

mysql -h172.18.0.1 -ublog -p --ssl-mode=REQUIRED --ssl-ca=""

🛠️ 영구적 해결책

MySQL 클라이언트 설정 파일 활용

# 홈 디렉토리에 MySQL 설정 파일 생성
nano ~/.my.cnf

설정 파일 내용:

[client]
# 기본 연결 정보
host=172.18.0.1
user=blog
password=your_password_here

# SSL 설정 Mysql 8
ssl-mode=DISABLED

# SSL 설정 Mysql 5 호환설정
# ssl=0

# 또는 SSL을 사용하되 검증을 우회하려면:
# ssl-mode=REQUIRED
# ssl-ca=

이제 간단하게 mysql 명령어만 입력해도 연결됩니다!

mysql  # 설정파일의 정보로 자동 연결

🐳 Docker 환경 특별 대응

Docker Compose 설정

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: blog
      MYSQL_USER: blog
      MYSQL_PASSWORD: blogpass
    command: --ssl=0  # SSL 완전 비활성화
    ports:
      - "3306:3306"

Docker 실행 시 SSL 비활성화

docker run -d 
  -e MYSQL_ROOT_PASSWORD=password 
  -p 3306:3306 
  mysql:8.0 --ssl=0

🔒 운영 환경을 위한 보안 설정

개발 환경에서는 SSL을 비활성화해도 무방하지만, 운영 환경에서는 보안이 중요합니다.

올바른 SSL 인증서 설정

MySQL 서버 설정 파일 (/etc/mysql/mysql.conf.d/mysqld.cnf):

[mysqld]
# 올바른 SSL 인증서 경로 설정
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
ssl-ca=/etc/mysql/ssl/ca-cert.pem

# SSL 연결 강제
require_secure_transport=ON

SSL 인증서 생성 (자체 서명)

# CA 키 생성
openssl genrsa 2048 > ca-key.pem

# CA 인증서 생성
openssl req -new -x509 -nodes -days 3600 
  -key ca-key.pem -out ca-cert.pem

# 서버 키 생성
openssl genrsa 2048 > server-key.pem

# 서버 인증서 요청 생성
openssl req -newkey rsa:2048 -days 3600 
  -nodes -keyout server-key.pem -out server-req.pem

# 서버 인증서 생성
openssl x509 -req -in server-req.pem -days 3600 
  -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 
  -out server-cert.pem

🚀 편의성을 위한 추가 팁

연결 스크립트 만들기

#!/bin/bash
# mysql_connect.sh
echo "MySQL 블로그 DB에 연결 중..."
mysql -h172.18.0.1 -ublog -p --ssl-mode=DISABLED --prompt="BlogDB>ckedi "

실행 권한 부여 후 사용:

chmod +x mysql_connect.sh
./mysql_connect.sh

환경별 설정 분리

[client]
ssl-mode=DISABLED

운영 환경 (.my.cnf.prod):

[client]
ssl-mode=VERIFY_IDENTITY
ssl-ca=/path/to/ca-cert.pem

사용할 때:

# 개발 환경
mysql --defaults-file=~/.my.cnf.dev

# 운영 환경  
mysql --defaults-file=~/.my.cnf.prod

🎯 상황별 권장 사항

 
환경 권장 방법 이유
로컬 개발 SSL 비활성화 빠른 개발을 위한 편의성
팀 개발 설정 파일 공유 일관된 환경 구성
스테이징 자체 서명 인증서 운영 환경 시뮬레이션
운영 환경 CA 발급 인증서 최고 수준의 보안

⚠️ 주의사항

  1. 보안 vs 편의성: 개발 편의를 위해 SSL을 비활성화할 수 있지만, 운영 환경에서는 반드시 SSL을 활성화하세요.
  2. 비밀번호 관리: 설정 파일에 비밀번호를 저장할 때는 파일 권한을 600으로 설정하세요.

chmod 600 ~/.my.cnf

  1. 버전별 차이: MySQL 5.7과 8.0에서 SSL 기본 정책이 다르니 버전을 확인하세요.

🏁 마무리

MySQL의 TLS/SSL 오류는 처음엔 당황스럽지만, 원인을 이해하고 나면 쉽게 해결할 수 있습니다. 개발 단계에서는 편의성을 위해 SSL을 비활성화하되, 운영 환경에서는 반드시 적절한 SSL 설정을 적용하시기 바랍니다.

이 글이 MySQL 연결 오류로 고생하시는 개발자분들에게 도움이 되었기를 바랍니다! 😊

안정적이고 저렴한 가상 서버(VPS) 안내

안정적인 서버 호스팅을 찾고 계신가요? 지금 Vultr 호스팅을 한번 이용 해 보세요. 지금 보고 계신 HaruLogs 사이트도 Vultr에서 VPS 호스팅 하고 있습니다. 한국, 일본, 미국등 다양한 국가에 클릭 몇번으로 안정적이고 저렴한 VPS를 운영 할 수 있습니다.

아래 배너를 통해 회원 가입을 하시면 100달러의 무료 크레딧을 받을 수 있습니다. 100달러의 무료 크레딧은 Vultr의 최소 사양 VPS를 20대 동시 운영가능한 크레딧입니다.

지금 무료로 Vultr $100 크레딧 선물 받기

 

Vultr 서비스 요약

  • VPS
    • 인스턴스
      • AMD 또는 Intel High Performance 인스턴스 최저 $6 - 1vCPU, 1GB Memory, 2TB Bandwidth, 25GB NVMe
    • 엣지
  • Block Storage
  • Object Storage (AWS S3 호환)
  • Firewall
  • Network
  • Load Balancers
  • Kubernetes
  • Databases
포스트 통계
지금 보고있는 포스트의 통계 데이터를 확인 해 보세요.
  • 총 조회수
    11
  • 최근 30일 조회수
    11
연관 포스트
코멘트 작성