2.4. MySQL 서버에서 TLS 암호화 설정


기본적으로 MySQL은 암호화되지 않은 연결을 사용합니다. 보안 연결의 경우 MySQL 서버에서 TLS 지원을 활성화하고 암호화된 연결을 설정하도록 클라이언트를 구성합니다.

2.4.1. MySQL 서버에 CA 인증서, 서버 인증서 및 개인 키 배치

MySQL 서버에서 TLS 암호화를 활성화하려면 먼저 CA(인증 기관) 인증서, 서버 인증서 및 MySQL 서버에 개인 키를 저장합니다.

사전 요구 사항

  • Privacy Enhanced mail (PEM) 형식의 다음 파일이 서버에 복사되었습니다.

    • 서버의 개인 키: server.example.com.key.pem
    • 서버 인증서: server.example.com.crt.pem
    • CA(인증 기관) 인증서: ca.crt.pem

    개인 키 및 CSR(인증서 서명 요청) 생성 및 CA에서 인증서를 요청하는 방법에 대한 자세한 내용은 CA 설명서를 참조하십시오.

프로세스

  1. /etc/pki/tls/certs/ 디렉터리에 CA 및 서버 인증서를 저장합니다.

    # mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/
    # mv <path>/ca.crt.pem /etc/pki/tls/certs/
    Copy to Clipboard Toggle word wrap
  2. MySQL 서버가 파일을 읽을 수 있도록 하는 CA 및 서버 인증서에 대한 권한을 설정합니다.

    # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
    Copy to Clipboard Toggle word wrap

    인증서는 보안 연결이 설정되기 전에 통신의 일부이므로 모든 클라이언트는 인증 없이 이를 검색할 수 있습니다. 따라서 CA 및 서버 인증서 파일에 대한 엄격한 권한을 설정할 필요가 없습니다.

  3. 서버의 개인 키를 /etc/pki/tls/private/ 디렉터리에 저장합니다.

    # mv <path>/server.example.com.key.pem /etc/pki/tls/private/
    Copy to Clipboard Toggle word wrap
  4. 서버의 개인 키에 대한 보안 권한을 설정합니다.

    # chmod 640 /etc/pki/tls/private/server.example.com.key.pem
    # chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
    Copy to Clipboard Toggle word wrap

    권한이 없는 사용자가 개인 키에 액세스할 수 있는 경우 MySQL 서버에 대한 연결이 더 이상 안전하지 않습니다.

  5. SELinux 컨텍스트를 복원합니다.

    # restorecon -Rv /etc/pki/tls/
    Copy to Clipboard Toggle word wrap

2.4.2. MySQL 서버에서 TLS 구성

보안을 강화하려면 MySQL 서버에서 TLS 지원을 활성화합니다. 결과적으로 클라이언트는 TLS 암호화를 사용하여 서버로 데이터를 전송할 수 있습니다.

사전 요구 사항

  • MySQL 서버를 설치했습니다.
  • mysqld 서비스가 실행 중입니다.
  • Privacy Enhanced mail (PEM) 형식의 다음 파일은 서버에 존재하며 mysql 사용자가 읽을 수 있습니다.

    • 서버의 개인 키: /etc/pki/tls/private/server.example.com.key.pem
    • 서버 인증서: /etc/pki/tls/certs/server.example.com.crt.pem
    • CA(인증 기관) 인증서 /etc/pki/tls/certs/ca.crt.pem
  • 서버 인증서의 제목 고유 이름(DN) 또는 SAN(주체 대체 이름) 필드는 서버의 호스트 이름과 일치합니다.

프로세스

  1. /etc/my.cnf.d/mysql-server-tls.cnf 파일을 만듭니다.

    1. 다음 콘텐츠를 추가하여 개인 키, 서버 및 CA 인증서에 대한 경로를 구성합니다.

      [mysqld]
      ssl_key = /etc/pki/tls/private/server.example.com.key.pem
      ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem
      ssl_ca = /etc/pki/tls/certs/ca.crt.pem
      Copy to Clipboard Toggle word wrap
    2. CRL(Certificate Revocation List)이 있는 경우 이를 사용하도록 MySQL 서버를 구성합니다.

      ssl_crl = /etc/pki/tls/certs/example.crl.pem
      Copy to Clipboard Toggle word wrap
    3. 선택 사항: 암호화 없이 연결 시도를 제거합니다. 이 기능을 활성화하려면 다음을 추가합니다.

      require_secure_transport = on
      Copy to Clipboard Toggle word wrap
    4. 선택 사항: 서버가 지원해야 하는 TLS 버전을 설정합니다. 예를 들어 TLS 1.3만 지원하려면 다음을 추가합니다.

      tls_version = TLSv1.3
      Copy to Clipboard Toggle word wrap

      기본적으로 서버는 TLS 1.2 및 TLS 1.3을 지원합니다.

  2. mysqld 서비스를 다시 시작합니다.

    # systemctl restart mysqld
    Copy to Clipboard Toggle word wrap

검증

문제 해결을 간소화하려면 TLS 암호화를 사용하도록 로컬 클라이언트를 구성하기 전에 MySQL 서버에서 다음 단계를 수행합니다.

  1. 이제 MySQL에 TLS 암호화가 활성화되어 있는지 확인합니다.

    # mysql -u root -p -h <MySQL_server_hostname> -e "SHOW session status LIKE 'Ssl_cipher';"
    +---------------+------------------------+
    | Variable_name | Value                  |
    +---------------+------------------------+
    | Ssl_cipher    | TLS_AES_256_GCM_SHA384 |
    +---------------+------------------------+
    Copy to Clipboard Toggle word wrap
  2. 특정 TLS 버전만 지원하도록 MySQL 서버를 구성한 경우 tls_version 변수를 표시합니다.

    # mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'tls_version';"
    +---------------+---------+
    | Variable_name | Value   |
    +---------------+---------+
    | tls_version   | TLSv1.3 |
    +---------------+---------+
    Copy to Clipboard Toggle word wrap
  3. 서버가 올바른 CA 인증서, 서버 인증서 및 개인 키 파일을 사용하는지 확인합니다.

    # mysql -u root -e "SHOW GLOBAL VARIABLES WHERE Variable_name REGEXP '{caret}ssl_ca|{caret}ssl_cert|{caret}ssl_key';"
    +-----------------+-------------------------------------------------+
    | Variable_name   | Value                                           |
    +-----------------+-------------------------------------------------+
    | ssl_ca          | /etc/pki/tls/certs/ca.crt.pem                   |
    | ssl_capath      |                                                 |
    | ssl_cert        | /etc/pki/tls/certs/server.example.com.crt.pem   |
    | ssl_key         | /etc/pki/tls/private/server.example.com.key.pem |
    +-----------------+-------------------------------------------------+
    Copy to Clipboard Toggle word wrap

2.4.3. MySQL 서버의 특정 사용자 계정에 대해 TLS 암호화 연결 필요

민감한 데이터에 액세스할 수 있는 사용자는 항상 TLS 암호화 연결을 사용하여 네트워크를 통해 암호화되지 않은 데이터를 보내지 않도록 해야 합니다.

모든 연결(require_secure_transport = on)에 보안 전송이 필요한 서버에서 구성할 수 없는 경우, TLS 암호화를 요구하도록 개별 사용자 계정을 구성합니다.

사전 요구 사항

  • MySQL 서버에는 TLS 지원이 활성화되어 있습니다.
  • 보안 전송을 요구하도록 구성하는 사용자가 있습니다.
  • CA 인증서는 클라이언트에 저장됩니다.

프로세스

  1. 관리 사용자로 MySQL 서버에 연결합니다.

    # mysql -u root -p -h server.example.com
    Copy to Clipboard Toggle word wrap

    관리 사용자에게 원격으로 서버에 액세스할 수 있는 권한이 없는 경우 MySQL 서버에서 명령을 수행하고 localhost 에 연결합니다.

  2. REQUIRE SSL 절을 사용하여 사용자가 TLS 암호화 연결을 사용하여 연결해야 합니다.

    MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
    Copy to Clipboard Toggle word wrap

검증

  1. TLS 암호화를 사용하여 서버에 예제 사용자로 연결합니다.

    # mysql -u example -p -h server.example.com
    ...
    MySQL [(none)]>
    Copy to Clipboard Toggle word wrap

    오류가 표시되지 않고 대화형 MySQL 콘솔에 액세스할 수 있는 경우 TLS와의 연결에 성공합니다.

    기본적으로 클라이언트는 서버에서 제공하는 경우 TLS 암호화를 자동으로 사용합니다. 따라서 --ssl-ca=ca.crt.pem--ssl-mode=VERIFY_IDENTITY 옵션은 필요하지 않지만 이러한 옵션을 사용하여 클라이언트는 서버 ID를 확인하므로 보안을 개선합니다.

  2. TLS가 비활성화된 사용자로 연결을 시도합니다.

    # mysql -u example -p -h server.example.com --ssl-mode=DISABLED
    ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)
    Copy to Clipboard Toggle word wrap

    이 사용자에게는 TLS가 필요하지만 비활성화됨(--ssl-mode=DISABLED)이므로 서버에서 로그인 시도를 거부했습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat