검색

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

download PDF

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

3.3.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. CA 및 서버 인증서를 /etc/pki/tls/certs/ 디렉터리에 저장합니다.

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

    # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem

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

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

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

    # chmod 640 /etc/pki/tls/private/server.example.com.key.pem
    # chgrp mysql /etc/pki/tls/private/server.example.com.key.pem

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

  5. SELinux 컨텍스트를 복원하십시오.

    # restorecon -Rv /etc/pki/tls/

3.3.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) 또는 subject alternatives name(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
    2. CRL(Certificate Revocation List)이 있는 경우 이를 사용하도록 MySQL 서버를 구성합니다.

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

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

      tls_version = TLSv1.2,TLSv1.3

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

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

    # systemctl restart mysqld

검증

문제 해결을 간소화하려면 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 |
    +---------------+------------------------+
  2. 특정 TLS 버전만 지원하도록 MySQL 서버를 구성한 경우 tls_version 변수를 표시합니다.

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

    # mysql -u root -e "SHOW GLOBAL VARIABLES WHERE Variable_name REGEXP '^ssl_ca|^ssl_cert|^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 |
    +-----------------+-------------------------------------------------+

3.3.3. 특정 사용자 계정에 대해 TLS 암호화 연결 필요

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

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

사전 요구 사항

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

절차

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

    # mysql -u root -p -h server.example.com

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

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

    MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;

검증

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

    # mysql -u example -p -h server.example.com
    ...
    MySQL [(none)]>

    오류가 표시되지 않고 대화형 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)

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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.