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 설명서를 참조하십시오.
-
서버의 개인 키:
프로세스
/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/
# mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL 서버가 파일을 읽을 수 있도록 하는 CA 및 서버 인증서에 대한 권한을 설정합니다.
chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
# chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인증서는 보안 연결이 설정되기 전에 통신의 일부이므로 모든 클라이언트는 인증 없이 이를 검색할 수 있습니다. 따라서 CA 및 서버 인증서 파일에 대한 엄격한 권한을 설정할 필요가 없습니다.
서버의 개인 키를
/etc/pki/tls/private/
디렉터리에 저장합니다.mv <path>/server.example.com.key.pem /etc/pki/tls/private/
# mv <path>/server.example.com.key.pem /etc/pki/tls/private/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버의 개인 키에 대한 보안 권한을 설정합니다.
chmod 640 /etc/pki/tls/private/server.example.com.key.pem chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
# 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 Copied! Toggle word wrap Toggle overflow 권한이 없는 사용자가 개인 키에 액세스할 수 있는 경우 MySQL 서버에 대한 연결이 더 이상 안전하지 않습니다.
SELinux 컨텍스트를 복원합니다.
restorecon -Rv /etc/pki/tls/
# restorecon -Rv /etc/pki/tls/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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(주체 대체 이름) 필드는 서버의 호스트 이름과 일치합니다.
프로세스
/etc/my.cnf.d/mysql-server-tls.cnf
파일을 만듭니다.다음 콘텐츠를 추가하여 개인 키, 서버 및 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
[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 Copied! Toggle word wrap Toggle overflow CRL(Certificate Revocation List)이 있는 경우 이를 사용하도록 MySQL 서버를 구성합니다.
ssl_crl = /etc/pki/tls/certs/example.crl.pem
ssl_crl = /etc/pki/tls/certs/example.crl.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 암호화 없이 연결 시도를 제거합니다. 이 기능을 활성화하려면 다음을 추가합니다.
require_secure_transport = on
require_secure_transport = on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 서버가 지원해야 하는 TLS 버전을 설정합니다. 예를 들어 TLS 1.3만 지원하려면 다음을 추가합니다.
tls_version = TLSv1.3
tls_version = TLSv1.3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기본적으로 서버는 TLS 1.2 및 TLS 1.3을 지원합니다.
mysqld
서비스를 다시 시작합니다.systemctl restart mysqld
# systemctl restart mysqld
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
문제 해결을 간소화하려면 TLS 암호화를 사용하도록 로컬 클라이언트를 구성하기 전에 MySQL 서버에서 다음 단계를 수행합니다.
이제 MySQL에 TLS 암호화가 활성화되어 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 특정 TLS 버전만 지원하도록 MySQL 서버를 구성한 경우
tls_version
변수를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버가 올바른 CA 인증서, 서버 인증서 및 개인 키 파일을 사용하는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.3. MySQL 서버의 특정 사용자 계정에 대해 TLS 암호화 연결 필요 링크 복사링크가 클립보드에 복사되었습니다!
민감한 데이터에 액세스할 수 있는 사용자는 항상 TLS 암호화 연결을 사용하여 네트워크를 통해 암호화되지 않은 데이터를 보내지 않도록 해야 합니다.
모든 연결(require_secure_transport = on
)에 보안 전송이 필요한 서버에서 구성할 수 없는 경우, TLS 암호화를 요구하도록 개별 사용자 계정을 구성합니다.
사전 요구 사항
- MySQL 서버에는 TLS 지원이 활성화되어 있습니다.
- 보안 전송을 요구하도록 구성하는 사용자가 있습니다.
- CA 인증서는 클라이언트에 저장됩니다.
프로세스
관리 사용자로 MySQL 서버에 연결합니다.
mysql -u root -p -h server.example.com
# mysql -u root -p -h server.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 관리 사용자에게 원격으로 서버에 액세스할 수 있는 권한이 없는 경우 MySQL 서버에서 명령을 수행하고
localhost
에 연결합니다.REQUIRE SSL
절을 사용하여 사용자가 TLS 암호화 연결을 사용하여 연결해야 합니다.MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
TLS 암호화를 사용하여 서버에
예제
사용자로 연결합니다.mysql -u example -p -h server.example.com
# mysql -u example -p -h server.example.com ... MySQL [(none)]>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 오류가 표시되지 않고 대화형 MySQL 콘솔에 액세스할 수 있는 경우 TLS와의 연결에 성공합니다.
기본적으로 클라이언트는 서버에서 제공하는 경우 TLS 암호화를 자동으로 사용합니다. 따라서
--ssl-ca=ca.crt.pem
및--ssl-mode=VERIFY_IDENTITY
옵션은 필요하지 않지만 이러한 옵션을 사용하여 클라이언트는 서버 ID를 확인하므로 보안을 개선합니다.TLS가 비활성화된 사용자로 연결을 시도합니다.
mysql -u example -p -h server.example.com --ssl-mode=DISABLED
# 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 Copied! Toggle word wrap Toggle overflow 이 사용자에게는 TLS가 필요하지만 비활성화됨(
--ssl-mode=DISABLED
)이므로 서버에서 로그인 시도를 거부했습니다.