SSL, TLS, STARTTLS 용어는 꽤나 혼란스럽습니다. 이 글은 SSL, TLS, STARTTLS 프로토콜의 차이점에 대한 정보를 제공합니다.

SSL과 TLS는 두 컴퓨터 사이의 연결을 암호화하는 표준 기술입니다. 통신을 제 3자가 엿보는 것을 방지합니다.

TLS는 SSL의 후계자입니다. 인터넷 트래픽을 다루는 모든 현대의 안전한 시스템은 이를 지원합니다. SSL과 TLS 용어는 뒤바뀌거나 번갈아가면서 쓰입니다.

STARTTLS는 SSL과 TLS와는 다릅니다. 암호화가 표준이 아니던 시절, 이메일 클라이언트와 서버 사이 연결은 안전하지 않았습니다. 개인적인 정보를 도청당할 위험이 있었습니다. STARTTLS는 기존의 안전하지 않은 연결의 위험을 줄이고 SSL/TLS이 쓰이는 안전한 연결로 업그레이드하도록 도와줍니다. STARTTLS는 SSL 또는 TLS로 동작합니다.

SSL/TLS 버전 번호

가장 오래된 것부터 나열하면 다음과 같습니다.

  1. SSL v2
  2. SSL v3
  3. TLS v1.0
  4. TLS v1.1
  5. TLS v1.2
  6. TLS v1.3

SSL과 TLS를 지원하는 포트에 연결되거나, 안전하지 않은 연결이 STARTTLS에 의해 업그레이드되면, 양측은 이 중에 지원되는 특정 버전을 쓰도록 합의합니다. 서버가 최신의 TLS v1.3을 지원하더라도, 이메일 클라이언트가 TLS v1.1만 지원한다면, 양측은 TLS v1.1을 쓰게 된다는 겁니다.

오늘날 거의 모든 온라인 서비스가 SSL/TLS를 지원하지만, 모든 서비스가 새로운 TLS v1.3을 지원하는 것은 아닙니다. SSL은 공식적으로 2018년 5월을 기점으로 퇴역하여 현대 온라인 서비스에서 더이상 쓰이지 않습니다. 현재 소프트웨어는 TLS v1.0, TLS v1.1, TLS v1.2를 지원하며, 많은 사이트와 서비스에서는 향상된 보안 프로필을 위해 최소한 TLS v1.2로 업그레이드를 강력히 권장하고 있습니다.

TLS vs STARTTLS 이름 문제

서로 다른 기술을 두고 이름에 혼동이 오게된 이유 중 하나는 일부 이메일 소프트웨어가 STARTTLS를 썼어야 하는 곳에 올바르지 않게 TLS라는 용어를 쓴 탓입니다.

오래된 버전의 Thunderbird는 특히 “TLS”라는 용어를 쓰면서 STARTTLS를 사용하여 연결을 업그레이드 해야하는 경우가 있었습니다. 이 때, STARTTLS가 지원되지 않는 서버에서는 연결이 실패했었습니다.

이런 버전에서는 “가능한 경우 TLS 연결”이라는 용어도 사용했습니다. 이는 서버에서 지원되는 경우 STARTTLS를 활용하여 연결을 업그레이드하고, 아니면 안전하지 않은 연결을 사용한다는 것입니다.

이메일 인증의 역사

SSL/TLS와 STARTTLS를 이해하려면, 각각의 역사와 함께, 기존의 유저 및 클라이언트의 행동과 결과에 대처하기 위한 산업 전반의 발전이 어떻게 이루어졌는지 이해할 필요가 있습니다. SSL/TLS와 STARTTLS는 IMAP, POP, SMTP가 자리잡아가던 시절에도 아직 존재하지 않았습니다. 기존의 동작을 방해하지 않으면서 적절한 보안을 추가하는 것은 커다란 도전이었습니다.

SSL/TLS vs 평문/STARTTLS 포트 번호

어떤 암호화가 지원되는 연결인지에 따라서, 포트 번호도 달라질 필요가 있었습니다.

SSL/TLS가 만들어졌을 때, IMAP, POP, SMTP와 같은 이메일 기술이 이미 있었기 때문에, 표준 포트인 143, 110, 25번에서는 평문 연결이 당연한 것이었습니다. 많은 서비스에서 STARTTLS가 이러한 포트를 업그레이드하는 것도 지원되었지만, 클라이언트가 이를 지원하지 않으면 암호와 같은 민감한 정보가 평문으로 전송될 위험이 있었습니다. 공격자에게 감시하고 있다면 암호를 심각한 위험에 노출하는 것입니다.

보안을 높이기 위해, 세 가지 새로운 포트가 결정되었습니다. 새 포트에서는 SSL/TLS 연결을 즉시 하는 것을 원칙으로 하였기에, 평문으로는 어떠한 정보도 전송하는 것을 거부하였습니다. 이렇게 하여 이메일과 암호가 안전하게 전송되거나 아예 전송되지 않음으로써 민감한 정보를 보호하였습니다. 이는 묵시적(implicit) TLS로 지칭되는데, 양측이 암호화된 연결을 지원할 것으로 기대한다는 소리입니다.

평문 프로토콜묵시적 TLS 프로토콜
IMAP143993
POP110995
SMTP25465

다수의 포트 번호 문제

한동안 새로운 포트가 묵시적 TLS에 동의해왔습니다만, 각각의 프로토콜에 두 개의 포트를 쓰는 것은 낭비였습니다. 단일 포트로도 지원하기 위해, STARTTLS는 하나의 포트를 써서 클라이언트가 평문으로 연결하고 SSL/TLS를 쓰는 안전한 연결로 업그레이드하는 방식으로 만들어졌습니다.

이것은 완벽한 해결책은 아니었습니다. 이미 새로운 포트 번호로 설정된 이메일 클라이언트를 사용하고 있는 실제 유저가 있었습니다. 이메일 클라이언트는 그대로 오래 가기 때문에, 새 포트를 없애버리는 것은 유저 친화적인 방식은 아니었습니다.

단일 포트로 연결을 업그레이드하는데 대한 보안 우려도 있었습니다. 지원되는 클라이언트에게 연결을 업그레이드하도록 알려주고, 업그레이드가 완료되기 전까지 사용자 이름과 암호를 평문으로 전송하지 말아야 한다는 내용이 각각의 프로토콜에 방식이 추가되긴 했지만, 일부 클라이언트 소프트웨어는 이를 무시하고 평문으로 사용자 이름과 암호를 전송했습니다. 서버가 연결을 거부해도, 로그인 정보가 암호화되지 않고 이미 전송되었기 때문에 보안 취약점으로 남아버렸습니다.

다른 소프트웨어는 연결을 업그레이드하라는 지시를 무시하고 사용자에게 로그인 오류를 반환했습니다. 이는 사용자에게 수많은 혼란을 불러일으켰습니다.

이런 문제가 기존의 클라이언트에게 큰 문제가 되었던 탓에, 대부분의 서비스는 첫 번째 포트에 평문 연결, 두 번째 포트에 묵시적 SSL/TLS 연결을 계속하여 사용하게 되었습니다.

오늘날, 많은 이메일 서비스는 143, 110 포트에 대한 평문 IMAP, POP 로그인을 완전히 비활성화하고 993, 995 포트에 암호화된 연결만을 허용하게 되었습니다. 이렇게 하면 모든 클라이언트가 암호화된 SSL/TLS 연결을 통해 민감한 정보를 보호된다고 확신할 수 있습니다.

SMTP STARTTLS만은 예외

SSL/TLS와 STARTTLS 사용에 대한 토론에서 하나 빠진 예외가 있는데, SMTP입니다.

SMTP는 원래 메시지 전달을 위해 디자인되었습니다. SMTP를 통한 메시지 전달은 서로 다른 서버 간에 이뤄지는 것으로, 클라이언트 직접 상호작용으로 디자인된 것이 아닙니다. 이런 이유 탓에 평문으로 사용자 암호를 전송하는 메일 클라이언트 같은 문제를 일찌감치 고려할 필요가 없었습니다.

얼마 되지 않아서 SMTP가 메시지 전달과 함께 메시지 발송에도 쓰이기 시작했습니다. 초기의 이메일 클라이언트는 25번 포트를 쓰는 SMTP를 설정했는데, 이 포트는 메일 시스템이 전송하는데 쓰이는 포트와 똑같은 번호입니다. 거대한 메일 전송 시스템에서는 신뢰 가능한 IP 주소만 사용하도록 포트 25를 제한할 수 있었습니다. 물론 이메일 발송을 하는 수많은 이메일 클라이언트가 사용하는 SMTP에도 이를 적용할 수 없기에, 메시지 발송에 587번 포트가 새로 정의되었습니다.

25번 포트 대신 587번 포트가 새롭게 쓰이면서 같은 시기에 민감한 정보를 보호해야 한다는 중요성이 알려지고, SMTP에 암호화 확장이 정의되었습니다. 메시지 발송을 위해서만 정의된 587번 포트는 STARTTLS를 사용하여 안전한 연결로 업그레이드가 지원됐습니다.

465번 포트도 SMTP 발송에 정의되었습니다. 587번 포트와는 다르게, IMAP용 993번 포트, POP용 995번 포트처럼 묵시적 TLS를 지원했습니다. 그러나 이 시점에서 묵시적 TLS를 선호하는 오늘날과 다르게, 업계의 흐름은 모든 IMAP, POP, SMTP 연결이 STARTTLS로 안전하게 업그레이드 되어야 한다는 기대로 움직였습니다. 이런 이유로 포트 465가 정의되게 얼마 되지 않아 제거되었습니다. 모든 클라이언트는 587로 STARTTLS를 사용하는게 일반적이었습니다.

메일 클라이언트 소프트웨어는 오래 쓰이고, 대부분의 사용자가 포트와 서버 설정을 스스로 해야 하는건 도전이 될 수 있습니다. 많은 메일 클라이언트는 465 포트를 통해 묵시적으로 SSL/TLS로만 연결하게 만들어졌습니다. 공식적으로 제거되었음에도, 465번 포트를 없애는 것은 무척 어렵게 되었습니다.

SMTP 메시지 발송을 지원하는 서비스는 클라이언트가 표준 587번 포트로 연결하여 STARTTLS로 연결을 업그레이드한 다음, 사용자 이름과 암호로 로그인하게 합니다.

2018년, 공식 요구는 465번 포트를 통해 묵시적 TLS를 사용하는 것으로 다시 바뀌었습니다. 이메일 클라이언트 소프트웨어의 주기가 길기 때문에, 587번 포트가 사용 중단되는 건 아직 남은 시간이 많은 것 같습니다.

오늘날 서비스는 이메일 발송으로 25번 포트를 사용하지 않도록 하고 있기 때문에, 다시 이 포트를 막고 기존의 용도대로 이메일의 전달에만 쓰일 수 있게 되었습니다. 25번 포트는 사용자 컴퓨터가 스팸 메일을 전송하는 바이러스 등으로 감염되면 스팸 메일의 중요한 관문이 되었기 때문에, 이 포트를 막음으로써 스팸 메일의 양이 극적으로 줄어들었습니다.

현재도 묵시적 465번 포트를 통한 SSL/TLS를 사용하는 유저와 587번 포트를 사용하여 STARTTLS로 연결을 업그레이드하는 유저 모두 늘어나고 있습니다.

번역문 원문

https://www.fastmail.com/help/technical/ssltlsstarttls.html

2년차 개발자 이진백입니다. 현재 일본에서 웹 프로그래머로 근무중입니다. 주로 Java, Vue (Nuxt), TypeScript 언어를 활용하고 있습니다. 취미로 C#과 Windows Universal Store App을 오래 만져왔고, 개인 서버 운영에도 관심이 많습니다. 최신 이슈를 알기 쉽게 전달해드리도록, 더욱 더 노력하겠습니다.