Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 클라이언트를 위한 TLS 암호화 연결 활성화 완벽 가이드

TLS는 SSL(Secure Sockets Layer)이라고도 불리며, 전송 계층 보안(Transport Layer Security)을 의미합니다.

MySQL 클라이언트와 서버 간의 연결이 암호화되어 있지 않다면, 네트워크에 접근 권한이 있는 사람은 모든 트래픽을 엿보고 클라이언트와 서버 사이에서 주고받는 데이터를 열람할 수 있습니다. 따라서 사용자가 안전한 방식으로 네트워크를 통해 정보를 전송하려면 암호화되지 않은 연결은 허용될 수 없습니다.

데이터를 읽을 수 없는 형태로 만들려면 반드시 암호화를 사용해야 합니다. 암호화 알고리즘에는 일반적으로 다양한 종류의 알려진 공격을 방어하는 데 도움이 되는 보안 요소들이 포함되어 있으며, 여기에는 암호화된 메시지의 순서를 바꾸거나 데이터를 재전송하는 리플레이(replay) 공격 등이 해당됩니다.

MySQL은 클라이언트와 서버가 TLS 프로토콜을 사용하는 암호화 연결을 지원합니다. 다만 MySQL은 SSL 프로토콜의 암호화 강도가 약하기 때문에 암호화 연결에 SSL 프로토콜을 사용하지 않습니다.

TLS는 암호화 알고리즘을 활용하여 공용 네트워크를 통해 수신한 데이터가 신뢰할 수 있는 데이터임을 보장합니다. 데이터 변조, 손실, 재전송을 탐지하는 여러 가지 메커니즘을 갖추고 있으며, X.509 표준에 기반한 신원 확인(identity verification) 알고리즘도 함께 사용합니다.

TLS 활성화 절차

MySQL은 연결 단위(per-connection)로 암호화를 수행합니다. 특정 사용자에 대한 암호화는 선택 사항일 수도 있고 필수일 수도 있는데, 이를 통해 사용자는 애플리케이션의 요구 사항에 따라 암호화된 연결 또는 암호화되지 않은 연결 중 하나를 선택할 수 있습니다.

그럼 MySQL 클라이언트에서 TLS를 활성화하는 방법을 단계별로 살펴보겠습니다.

  • 서버를 시작할 때 구성 파일에서 ssl-certssl-key 매개변수를 지정해야 합니다.
  • 인증서와 키는 OpenSSL을 사용하여 생성하고 서명합니다.
  • 키는 MySQL에서 제공하는 mysql_ssl_rsa_setup 도구로도 생성할 수 있습니다.
    mysql_ssl_rsa_setup --datadir=./certs
  • 매개변수가 올바르게 설정되면, 서버 시작 시 보안 연결이 활성화된 상태로 출력됩니다.
  • 인증서, 키, CA를 다시 로드하려면 서버 인스턴스에서 ALTER INSTANCE RELOAD TLS 문을 실행합니다. 이렇게 하면 서버 인스턴스를 재시작하지 않고도 설정을 갱신할 수 있습니다.
  • 새로 로드된 인증서, 키, CA는 기존에 맺어진 연결이 정상적으로 종료된 이후 새로운 연결부터 적용됩니다.
  • MySQL 클라이언트는 기본적으로 암호화된 연결 설정을 시도합니다. 만약 서버가 암호화된 연결을 지원하지 않으면 자동으로 암호화되지 않은 연결로 대체(fallback)됩니다.
  • 클라이언트의 연결 동작은 --ssl-mode 매개변수로 변경할 수 있습니다.
    --ssl-mode=REQUIRED : 암호화된 연결이 필수임을 지정합니다.

인증(Authentication) 활성화하기

ssl-ca 매개변수가 지정되지 않으면, 클라이언트나 서버는 기본적으로 상대방에 대한 인증을 수행하지 않습니다. 인증을 활성화하려면 다음 조건을 충족해야 합니다.

  • 서버 측에 ssl-cert 및 ssl-key 매개변수를 지정합니다.
  • MySQL 클라이언트에 --ssl-ca 매개변수를 지정합니다.
  • MySQL 클라이언트에서 --ssl-modeVERIFY_CA로 설정합니다.
  • 서버에 구성된 인증서(ssl-cert)는 클라이언트의 --ssl-ca 매개변수로 지정된 CA에 의해 서명되어야 합니다.
  • 위 조건이 충족되지 않으면 인증에 실패합니다.

서버에서 MySQL 클라이언트 인증하기

  • 서버 측에 ssl-cert, ssl-key, ssl-ca 매개변수를 모두 지정합니다.
  • 클라이언트 측에 --ssl-cert--ssl-key 매개변수를 지정합니다.
  • 서버에 구성된 인증서와 클라이언트에 구성된 인증서는 모두 서버가 지정한 ssl-ca에 의해 서명되어야 합니다.
  • 서버가 클라이언트를 인증하는 것은 선택 사항입니다. 클라이언트가 TLS 핸드셰이크 과정에서 식별용 인증서를 제시하지 않더라도 TLS 연결은 그대로 설정됩니다.
  • 마지막으로, 현재 연결이 실제로 암호화를 사용하고 있는지 확인하는 것이 좋습니다.