MySQL과 SSL/TLS를 통한 접속
MySQL 8.0.28부터 TLS 1.0/1.1이 제거돼 구형 클라이언트는 접속이 실패한다.
MySQL 업그레이드에서 가장 먼저 확인해야 할 것은 SSL/TLS 버전 호환성이다. 서버와 클라이언트는 공통으로 지원하는 TLS 버전이 있어야 handshake가 성공하며, 버전이 맞지 않으면 암호화 접속 자체가 실패한다.
MySQL 8.0.28에서는 TLSv1.0과 TLSv1.1 지원이 제거됐다. 반면 MySQL 5.7.37 환경에서는 tls_version이 TLSv1,TLSv1.1,TLSv1.2로 표시되며, 버전 차이에 따라 접속 가능한 TLS 범위가 달라진다.
구형 Java와 Python 드라이버로 접속하면 실제로 오류가 발생한다.
- Java에서는
SSLHandshakeException: Received fatal alert: protocol_version가 나타난다. - Python에서는
TLSV1_ALERT_PROTOCOL_VERSION예외가 발생한다.
반대로 Java 8 Update 291처럼 클라이언트 쪽에서 TLSv1.0/TLSv1.1이 비활성화된 경우에도, 서버가 오래된 버전이라 TLSv1.2를 지원하지 않으면 같은 방식으로 handshake가 실패한다. 즉 문제는 서버 업그레이드만의 이슈가 아니라, 드라이버와 개발 언어 버전 변경만으로도 생길 수 있다.
운영 환경에서는 서버와 클라이언트 양쪽의 TLS 지원 범위를 사전에 점검해야 한다. MySQL에서 세션별 접속 방식과 TLS 버전은 sys.session_ssl_status와 performance_schema.threads를 조인해 확인할 수 있으며, 이를 통해 어떤 세션이 어떤 TLS로 접속 중인지 추적할 수 있다.
핵심은 MySQL 버전 업그레이드, 드라이버 교체, 언어 런타임 변경을 할 때마다 TLS 버전 매칭을 반드시 함께 검증해야 한다는 점이다. 그렇지 않으면 겉보기에는 정상적인 접속 설정이어도, 실제로는 handshake 단계에서 바로 끊긴다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.