TLS는 인터넷 커뮤니케이션을 위한 개인 정보와 데이터 무결성을 제공하는 보안 프로토콜입니다. TLS를 구현하는 것은 안전한 웹 앱을 구축하기 위한 표준 관행입니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
관련 콘텐츠
인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!
글 링크 복사
TLS(Transport Layer Security)는 인터넷 상의 커뮤니케이션을 위한 개인 정보와 데이터 보안을 용이하게 하기 위해 설계되어 널리 채택된 보안 프로토콜입니다. TLS의 주요 사용 사례는 웹 사이트를 로드하는 웹 브라우저와 같이 웹 애플리케이션과 서버 간의 커뮤니케이션을 암호화하는 것입니다. TLS는 또한 이메일, 메시지, 보이스오버 IP(VoIP) 등 다른 커뮤니케이션을 암호화하기 위해 사용됩니다. 이 문서에서는 웹 애플리케이션 보안에서 TLS의 역할에 주목하겠습니다.
TLS는 국제 표준 기구인 IETF(Internet Engineering Task Force)에 의해 제안되었으며 프로토콜의 첫 번째 버전은 1999년에 발표되었습니다. 가장 최신 버전은 2018년에 발표된 TLS 1.3입니다.
TLS는 Netscape가 개발한 SSL(Secure Sockets Layer)이라고 불리는 이전의 암호화 프로토콜에서 발전한 것입니다. TLS 버전 1.0은 SSL 버전 3.1로서 개발을 시작했지만 Netscape와 더 이상 연관이 없음을 명시하기 위해 발표 전에 프로토콜의 이름이 변경되었습니다. 이러한 역사 때문에 용어 TLS와 SSL은 가끔 서로 바꿔서 사용됩니다.
HTTPS는 HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것으로 모든 웹 사이트와 다른 웹 서비스에서 사용됩니다. 따라서 HTTPS를 사용하는 웹 사이트는 TLS 암호화를 이용합니다.
TLS 암호화는 데이터 유출 및 기타 공격으로부터 웹 애플리케이션을 보호하는 데 도움이 될 수 있습니다. 오늘날 TLS로 보호되는 HTTPS는 웹 사이트의 표준 관행입니다. Google Chrome 브라우저는 점차적으로 비HTTPS 사이트를 엄중 단속했으며, 다른 브라우저도 그 뒤를 따랐습니다. 일상적인 인터넷 사용자들은 HTTPS 자물쇠 아이콘이 없는 웹 사이트를 더욱 경계합니다.
TLS 프로토콜은 암호화, 인증, 무결성이라는 세 가지 주요 요소를 달성합니다.
웹 사이트나 애플리케이션이 TLS를 사용하기 위해서는 원본 서버에 TLS 인증서가 설치되어 있어야 합니다(위에서 설명한 이름 혼동 때문에 이 인증서는 "SSL 인증서"라고도 알려져 있습니다). 인증 기관이 도메인을 소유한 사람 혹은 비즈니스에게 TLS 인증서를 발행합니다. 인증서는 서버의 공개 키와 더불어 누가 도메인 소유자인지에 대한 중요한 정보를 포함하며, 이 두 가지는 모두 서버의 신원을 확인하는 데 중요합니다.
TLS 연결은 TLS 핸드셰이크로 알려진 일련의 순서를 사용하여 초기화됩니다. 사용자가 TLS를 사용하는 웹 사이트를 돌아다니면 사용자 장치(클라이언트 장치로도 알려짐)와 웹 서버 간에 TLS 핸드셰이크가 시작됩니다.
TLS 핸드셰이크가 진행되는 동안 사용자 장치와 웹 서버는 다음과 같은 일을 수행합니다.
TLS 핸드셰이크는 각 커뮤니케이션 세션을 위한 암호 제품군을 구축합니다. 암호 제품군은 공유된 암호화 키 또는 세션 키와 같은 세부 정보를 명시하는 알고리즘 집합으로 해당 특정 세션에 사용됩니다. 공개 키 암호화로 알려진 기술 덕분에 TLS는 암호화되지 않은 채널을 통해 일치하는 세션 키를 설정할 수 있습니다.
핸드셰이크는 또한 인증을 처리하며, 이는 대개 클라이언트에게 신원을 증명하는 서버로 구성됩니다. 이는 공개 키를 사용하여 수행됩니다. 공개 키는 단방향 암호화를 사용하는 암호화 키로, 공개 키를 가진 누구나 신뢰성을 보장하기 위해 서버의 개인 키로 암호화된 데이터를 해독할 수 있음을 의미하지만 원래 발신자만 개인 키를 사용해 데이터를 암호화할 수 있습니다. 서버의 공개 키는 TLS 인증서의 일부입니다.
데이터카 암호화되고 인증되고 나면, 메시지 인증 코드(MAC)와 함께 서명됩니다. 수신자는 데이터의 무결성을 보장하기 위해 MAC를 확인할 수 있습니다. 이는 아스피린 병에서 발견할 수 있는 일종의 부정 조작 방지 포장과 같은 것입니다. 소비자는 구매할 때 포장이 손상되지 않았으면 아무도 약에 손대지 않았다는 것을 알 수 있습니다.
TLS의 최신 버전은 웹 애플리케이션 성능에 거의 영향을 미치지 않습니다.
TLS 연결을 설정하는 데 수반되는 복잡한 프로세스로 인해 로드 시간과 계산 능력이 소모될 수 있습니다. 데이터가 전송되기 전에 클라이언트와 서버는 여러 번 커뮤니케이션을 주고받아야 하며, 이는 클라이언트와 서버 모두를 위한 메모리뿐만 아니라 웹 응용 프로그램의 귀중한 밀리초의 로드 시간을 소모합니다.
하지만 TLS 핸드셰이크가 생성한 잠재적인 대기 시간을 완화하는 것을 돕는 기술이 있습니다. 하나는 TLS 핸드셰이크가 완료되기 전에 서버와 클라이언트가 데이터 전송을 시작하도록 하는 TLS False Start입니다. TLS를 빠르게 하기 위한 또 다른 기술은 이전에 커뮤니케이션한 적이 있는 서버와 클라이언트가 간략화된 핸드셰이크를 사용하도록 허용하는 TLS 세션 재개입니다.
이러한 개선 사항은 TLS가 로드 시간에 현저하게 영향을 미치지 않는 매우 빠른 프로토콜이 되는 데 도움이 되었습니다. TLS와 연관된 계산 비용은 오늘날 표준에 따르면 거의 무시해도 좋은 정도입니다.
2018년에 발표된 TLS 1.3은 TLS를 더 빠르게 만들었습니다. TLS 1.3의 TLS 핸드셰이크는 몇 밀리세컨드로 프로세스를 단축하며 2회 왕복 대신 1회 왕복(또는 왔다 갔다하는 커뮤니케이션)만을 요구합니다. 사용자가 전에 웹 사이트에 연결한 적이 있으면, TLS 핸드셰이크는 왕복 횟수가 0이므로 속도를 더 빠르게 할 수 있습니다.
Cloudflare는 모든 사용자들에게 무료 TLS/SSL 인증서를 제공합니다. Cloudflare를 사용하지 않는 사람은 인증 기관으로부터 대개는 요금을 지불하여 SSL 인증서를 획득해야 하며 원본 서버에 인증서를 설치해야 합니다.
TLS/SSL 인증서에 대해 자세히 알아보려면 SSL 인증서란?을 참조하세요.