MySQL은 MySQL Community와 MySQL Enterprise 양쪽 모두에서 키 생성 과정을 간소화하여 보안 연결을 더욱 쉽게 구성할 수 있도록 지원합니다. TLSv1.1 및 TLSv1.2에 대한 지원이 확장되면서 전반적인 보안 수준도 함께 향상되었습니다. 또한 관리자는 향상된 가시성을 통해 클라이언트가 안전하게 연결되고 있는지 여부를 명확히 판단할 수 있습니다.
보안 연결의 중요성이 강조되는 가운데, MySQL 서버에는 새로운 서버 측 구성 옵션이 도입되었습니다. 이 옵션을 사용하면 MySQL 관리자가 보안 전송(secure transport)을 사용하는 클라이언트의 연결만 허용하도록 제한할 수 있습니다. 연결에 보안 전송이 필요하다고 할 때, 먼저 확인해야 할 질문은 '어떤 종류의 전송 방식이 보안 전송에 해당하는가'입니다.
보안 전송(Secure Transport)의 종류
MySQL에서 보안 전송으로 간주되는 연결 방식은 다음과 같습니다.
- SSL/TLS
- 소켓(Socket)
- 공유 메모리(Shared Memory)
특히 주의할 점은, Windows 환경에서 네임드 파이프(named pipe) 전송을 사용하는 연결은 보안 전송으로 간주되지 않는다는 것입니다. 이러한 연결은 대개 로컬에서 이루어지지만, 네임드 파이프 연결은 원격으로도 가능합니다. 문제는 네임드 파이프가 네트워크를 통해 전송되는 데이터(페이로드)를 보호할 수 있는 암호화 기능을 제공하지 않는다는 데 있습니다.
--require_secure_transport 옵션
새롭게 추가된 구성 옵션은 --require_secure_transport입니다. 이 불리언(boolean) 옵션의 기본값은 OFF입니다. 기본값인 OFF 상태에서는 위에서 언급한 지원 프로토콜 중 어떤 것을 사용하든 연결이 허용되며, 이는 기존의 레거시 동작과 일치합니다.
반면 --require_secure_transport=ON으로 설정하면, 서버는 위에 나열된 보안 연결 유형 중 하나를 사용하지 않는 새로운 연결 요청을 거부합니다.
비보안 연결 시 발생하는 오류
비보안 연결로 인해 거부된 클라이언트는 아래와 같은 오류 메시지를 받게 됩니다.
예제
D:\mysql-advanced-5.7.10-winx64>bin\mysql -uroot -P3310 --skip-ssl
출력 결과
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
위 예제처럼 --skip-ssl 옵션으로 SSL 없이 접속을 시도하면, 오류 코드 3159와 함께 연결이 차단됩니다. 이는 서버가 보안 전송을 강제하고 있다는 것을 의미합니다.
계정 수준 요구 사항과의 상호 작용
MySQL은 특정 계정에 대해서만 TLS 사용을 요구하는 기능도 지원합니다. 이는 CREATE USER 또는 ALTER USER 명령에 REQUIRE SSL 절을 포함시키는 방식으로 구현됩니다. 새로 도입된 --require_secure_transport 옵션은 이러한 계정 수준의 요구 사항에 더해, 서버 전체(전역) 수준에서 보안 전송을 강제함으로써 한층 강력한 보안 정책을 적용할 수 있게 해줍니다.