기술 · 출처 기반 답변
STARTTLS란? 기회적 TLS로 SMTP 통신 보호하기
STARTTLS는 보안되지 않은 연결을 TLS를 사용한 보안 연결로 업그레이드할 수 있게 하는 SMTP 서비스 확장입니다. 클라이언트와 서버가 하나의 포트에서 보안 채널을 협상할 수 있어, 전송 중에 이메일 내용과 인증 자격 증명이 암호화됩니다.
동작 원리
과정은 표준 평문 SMTP 핸드셰이크로 시작합니다. 서버는 EHLO 응답에서 STARTTLS 기능을 알립니다. 그러면 클라이언트가 STARTTLS 명령을 실행합니다. 서버가 수락하면 양측이 TLS 핸드셰이크를 수행해 암호화를 설정합니다. 보안 계층이 활성화되면 세션은 표준 SMTP 명령으로 계속되지만, 이후의 모든 데이터는 암호화됩니다.
발신자에게 중요한 이유
STARTTLS는 메일 서버 사이의 통신 경로를 암호화해 도청과 중간자 공격을 방지합니다. STARTTLS가 없으면 SMTP 트래픽이 평문으로 전송되어, 네트워크 경로를 모니터링하는 누구에게나 민감한 메시지 본문과 로그인 자격 증명이 노출됩니다. 대부분의 최신 수신 서버는 메일을 받으려면 암호화된 연결을 우선하거나 요구합니다.
운영상 고려 사항
중요한 위험은 다운그레이드 공격입니다. 공격자가 서버 응답에서 STARTTLS 명령을 제거해 클라이언트가 평문으로 메일을 보내도록 강제하는 방식입니다. 이를 막기 위해 관리자는 MTA-STS를 구현하거나 필수 TLS를 구성할 수 있습니다. 더 나은 전달을 위해 SendHQ 무료 도구(https://sendhq.cc/tools)로 전반적인 도메인 구성을 확인할 수 있습니다.
흔한 구현 실수
흔한 오류는 STARTTLS를 암시적 TLS와 혼동하는 것입니다. STARTTLS는 평문 포트(예: 587)에서 시작해 업그레이드하는 반면, 암시적 TLS(465번 포트)는 SMTP 명령을 보내기 전에 보안 핸드셰이크를 요구합니다. 포트를 잘못 구성하거나 유효한 SSL 인증서를 제공하지 않으면 연결이 실패하거나 안전하지 않은 전송으로 폴백합니다.
구체적인 예시
클라이언트가 587번 포트에 연결해 EHLO를 보냅니다. 서버는 250-STARTTLS로 응답합니다. 클라이언트가 STARTTLS를 보냅니다. 서버는 220 Ready to start TLS로 응답합니다. 클라이언트와 서버는 키를 협상해 세션을 암호화합니다. 그다음 클라이언트는 AUTH LOGIN을 보내 네트워크에 노출되지 않게 자격 증명을 안전하게 전달합니다.
팀에서 자주 묻는 질문
STARTTLS는 SSL/TLS와 같은 것인가요?
STARTTLS는 기존 평문 연결에서 TLS 세션을 시작하는 데 사용하는 명령이고, SSL/TLS는 그 기반이 되는 암호화 프로토콜 자체를 가리킵니다.
STARTTLS가 실패하면 어떻게 되나요?
기본적으로 대부분의 서버는 기회적 TLS를 사용하므로 핸드셰이크가 실패하면 평문으로 폴백합니다. 필수 TLS를 명시적으로 구성한 경우는 예외입니다.
STARTTLS에는 보통 어떤 포트를 사용하나요?
587번 포트는 STARTTLS를 사용하는 표준 제출 포트이며, 서버 간 릴레이를 위한 25번 포트에서도 자주 사용됩니다.
1차 출처
- RFC 3207: 전송 계층 보안(TLS) 기반 보안 SMTP를 위한 SMTP 서비스 확장 — RFC Editor
- RFC 8314: SMTP 이후 이메일 프로토콜의 평문 관련 고려 사항 — RFC Editor