2.3. MariaDB 서버에서 TLS 암호화 설정
기본적으로 MariaDB 는 암호화되지 않은 연결을 사용합니다. 보안 연결을 위해 MariaDB 서버에서 TLS 지원을 활성화하고 암호화된 연결을 설정하도록 클라이언트를 구성합니다.
2.3.1. MariaDB 서버에 CA 인증서, 서버 인증서 및 개인 키 배치
MariaDB 서버에서 TLS 암호화를 활성화하려면 MariaDB 서버에 인증 기관(CA) 인증서, 서버 인증서 및 개인 키를 저장할 수 있습니다.
사전 요구 사항
Privacy Enhanced Mail (PEM) 형식의 다음 파일이 서버에 복사되었습니다.
-
서버의 개인 키:
server.example.com.key.pem
-
서버 인증서:
server.example.com.crt.pem
-
CA(인증 기관) 인증서:
ca.crt.pem
개인 키 및 CSR(인증서 서명 요청) 생성 및 CA에서 인증서 요청에 대한 자세한 내용은 CA 문서를 참조하십시오.
-
서버의 개인 키:
절차
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/
MariaDB 서버가 파일을 읽을 수 있도록 CA 및 서버 인증서에 대한 권한을 설정합니다.
# chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
인증서는 보안 연결을 설정하기 전에 통신의 일부이므로 모든 클라이언트는 인증 없이 검색할 수 있습니다. 따라서 CA 및 서버 인증서 파일에 대한 엄격한 권한을 설정할 필요가 없습니다.
서버의 개인 키를
/etc/pki/tls/private/
디렉터리에 저장합니다.# mv <path>/server.example.com.key.pem /etc/pki/tls/private/
서버의 개인 키에 보안 권한을 설정합니다.
# chmod 640 /etc/pki/tls/private/server.example.com.key.pem # chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
권한이 없는 사용자가 개인 키에 액세스할 수 있는 경우 MariaDB 서버에 대한 연결이 더 이상 안전하지 않습니다.
SELinux 컨텍스트를 복원하십시오.
# restorecon -Rv /etc/pki/tls/
2.3.2. MariaDB 서버에서 TLS 구성
보안을 개선하려면 MariaDB 서버에서 TLS 지원을 활성화합니다. 결과적으로 클라이언트는 TLS 암호화를 사용하여 서버로 데이터를 전송할 수 있습니다.
사전 요구 사항
- MariaDB 서버를 설치했습니다.
-
mariadb
서비스가 실행 중입니다. 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) 필드는 서버의 호스트 이름과 일치합니다.
- 서버가 RHEL 9.2 이상을 실행하고 FIPS 모드가 활성화된 경우 클라이언트는 확장 마스터 시크릿(Extended Master Secret) 확장을 지원하거나 TLS 1.3을 사용해야 합니다. TLS 1.2 연결이 없는 경우 실패합니다. 자세한 내용은 RHEL 9.2 이상에 적용된 Red Hat Knowledgebase 솔루션 TLS 확장 "확장 마스터 시크릿"을 참조하십시오.
절차
/etc/my.cnf.d/mariadb-server-tls.cnf
파일을 생성합니다.다음 콘텐츠를 추가하여 개인 키, 서버 및 CA 인증서에 대한 경로를 구성합니다.
[mariadb] 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
CRL(인증서 해지 목록)이 있는 경우 이를 사용하도록 MariaDB 서버를 구성합니다.
ssl_crl = /etc/pki/tls/certs/example.crl.pem
선택 사항: 암호화 없이 연결 시도를 거부합니다. 이 기능을 활성화하려면 다음을 추가합니다.
require_secure_transport = on
선택 사항: 서버가 지원해야 하는 TLS 버전을 설정합니다. 예를 들어 TLS 1.2 및 TLS 1.3을 지원하려면 다음을 추가합니다.
tls_version = TLSv1.2,TLSv1.3
기본적으로 서버는 TLS 1.1, TLS 1.2 및 TLS 1.3을 지원합니다.
mariadb
서비스를 다시 시작합니다.# systemctl restart mariadb
검증
문제 해결을 간소화하려면 TLS 암호화를 사용하도록 로컬 클라이언트를 구성하기 전에 MariaDB 서버에서 다음 단계를 수행합니다.
MariaDB 에 TLS 암호화가 활성화되어 있는지 확인합니다.
# mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'have_ssl';" +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_ssl | YES | +---------------+-----------------+
have_ssl
변수를yes
로 설정하면 TLS 암호화가 활성화됩니다.특정 TLS 버전만 지원하도록 MariaDB 서비스를 구성한 경우
tls_version
변수를 표시합니다.# mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'tls_version';" +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | tls_version | TLSv1.2,TLSv1.3 | +---------------+-----------------+
2.3.3. 특정 사용자 계정에 대해 TLS 암호화 연결 필요
중요한 데이터에 액세스할 수 있는 사용자는 항상 TLS 암호화 연결을 사용하여 네트워크를 통해 암호화되지 않은 데이터를 전송하지 않도록 해야 합니다.
모든 연결(에서 required_secure_transport =)에 보안 전송이 필요한
서버에서 를 구성할 수 없는 경우 TLS 암호화가 필요하도록 개별 사용자 계정을 구성합니다.
사전 요구 사항
- MariaDB 서버에는 TLS 지원이 활성화되어 있습니다.
- 보안 전송을 요구하도록 구성하는 사용자가 있습니다.
절차
관리자로 MariaDB 서버에 연결합니다.
# mysql -u root -p -h server.example.com
관리자가 서버에 원격으로 액세스할 수 있는 권한이 없는 경우 MariaDB 서버에서 명령을 수행하고
localhost
에 연결합니다.REQUIRE SSL
절을 사용하여 사용자가 TLS 암호화 연결을 사용하여 연결해야 함을 적용합니다.MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
검증
TLS 암호화를 사용하여 서버에
예제
사용자로 연결합니다.# mysql -u example -p -h server.example.com --ssl ... MariaDB [(none)]>
오류가 표시되지 않고 대화형 MariaDB 콘솔에 액세스할 수 있는 경우 TLS와의 연결이 성공합니다.
TLS가 비활성화된
예제
사용자로 연결을 시도합니다.# mysql -u example -p -h server.example.com --skip-ssl ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)
이 사용자에게는 TLS가 필요하지만 비활성화됨(
--skip-ssl
)이므로 서버에서 로그인 시도를 거부했습니다.
추가 리소스