커뮤니티·지원
목차
< 용어사전으로 돌아가기
TLS(Transport Layer Security)

TLS(Transport Layer Security)는 온라인 네트워크에서 데이터를 안전하게 주고받기 위한 암호화 프로토콜입니다. 통신 데이터를 TLS 프로토콜을 따라 암호화하면 누군가 데이터를 가로채도 복호화할 수 없기 때문에 악성 공격에서 데이터를 보호할 수 있어요. 2018년에 공개된 TLS 1.3이 현재 가장 최신 버전입니다.

TLS가 적용된 HTTP는 HTTPS라고 불립니다. HTTP 뒤에 붙은 S는 보안(Security)를 뜻하죠. 토스페이먼츠는 결제 데이터를 보호하기 위해 TLS 1.2 이상만 지원합니다. TLS가 적용되지 않은 HTTP 데이터는 평문으로 통신되기 때문에 위험합니다.

SSL(Secure Sockets Layer)은 TLS와 함께 사용되는 용어인데요. SSL은 넷스케이프사에서 1995년에 개발한 HTTP 암호화 프로토콜입니다. 하지만 SSL에는 여러 보안 취약점이 있었기 때문에 사용이 중단되었고, 더 안전한 TLS 프로토콜로 대체됐어요.

TLS가 아직 생소해서 지금도 널리 SSL이라는 용어가 사용되지만, 실제로는 TLS를 사용하는 게 더 일반적입니다. 최신 웹 브라우저는 대부분 SSL을 지원하지 않고, 지원하더라도 사용 환경이 저하될 수 있는 위험이 있어요. 이런 이유로 SSL은 1996년 이후에 업데이트되지 않았어요.

TLS 보안

TLS는 다음 세 가지 방법으로 통신 데이터를 보호해요.

  • 인증: 통신하고 있는 서버를 신뢰할 수 있는지 알려줍니다. CA(Certification Authority)에서 발급받는 인증서로 상대 서버의 서비스 정보, 공개키, 지문, 디지털 서명 등 다양한 정보를 확인할 수 있어요. 인증서를 통해 클라이언트가 올바른 서버와 통신하고 있는 것을 확인하고, 중간자 공격과 같은 위험을 방지합니다.

  • 암호화: TLS 프로토콜은 대칭 및 비대칭 암호화 조합을 사용해서 안전하게 데이터를 보호합니다. 통신을 시작할 때 비대칭키로 안전하게 대칭키를 공유하고, 실제로 통신 과정에서는 대칭키로 데이터를 암호화 및 복호화해요. 권한이 있는 사용자만 암호화된 데이트를 읽을 수 있습니다.

  • 무결성: 통신 과정에서 데이터가 손실되거나 변조되는 것을 방지합니다. 메시지 인증 코드(MAC)를 사용해 데이터를 검증하며, 허가되지 않은 수정이나 손상이 발생할 경우 이를 탐지할 수 있습니다.

TLS 핸드셰이크 과정

TLS 핸드셰이크는 암호화된 통신 세션을 시작하는 중요한 단계입니다. 가 성립된 이후 TLS 핸드셰이크가 시작됩니다. 예를 들어, 브라우저가 HTTPS를 통해 최초로 웹사이트 서버를 쿼리할 때 TLS 핸드셰이크가 진행됩니다. 동일한 세션 내에서 발생하는 추가 쿼리들은 이미 생성된 세션을 재사용하기 때문에 TLS 핸드셰이크가 다시 일어나지 않습니다. 웹사이트 방문뿐만 아니라 API 호출, DNS 쿼리(DoH와 같은 암호화된 DNS) 등 HTTPS를 사용하는 경우마다 TLS 핸드셰이크가 발생합니다.

  • 클라이언트 헬로: 클라이언트는 서버에 "클라이언트 헬로" 메시지를 보내면서 핸드셰이크를 시작합니다. 이 메시지에는 클라이언트가 지원하는 TLS 버전, 무작위 바이트 문자열(클라이언트 랜덤 값), 그리고 클라이언트가 지원하는 암호화 스위트 목록이 포함됩니다.

  • 서버 헬로: 서버는 "서버 헬로" 메시지로 응답합니다. 서버의 디지털 인증서, 서버가 선택한 암호화 스위트, 그리고 서버가 생성한 무작위 바이트 문자열(서버 랜덤 값)이 메시지에 포함됩니다.

  • 키 교환: 클라이언트는 서버의 인증서를 검토하여 서버가 해당 도메인의 소유자인지 확인합니다. 확인이 완료되면 세션 키를 안전하게 생성하기 위해 키를 교환합니다. 클라이언트와 서버 모두 각자의 랜덤 값과 교환된 키 데이터를 사용해서 동일한 세션 키를 생성합니다.

  • 클라이언트 완료 및 서버 완료: 세션 키가 생성되면, 클라이언트는 세션 키로 암호화된 "Change Cipher Spec" 메시지와 "Finished" 메시지를 서버에 전송합니다. 서버도 마찬가지로 "Change Cipher Spec"과 "Finished" 메시지를 클라이언트에 전송하며, 이 시점부터 모든 통신은 세션 키를 사용해 암호화됩니다.

  • 데이터 교환: 세션 키로 모든 데이터가 암호화되어 안전하게 통신됩니다.

TLS 핸드셰이크

  • 더 궁금한 내용이 있나요?
  • 코드 샘플을 참고하세요
  • 기술지원이 필요한가요?
    실시간 문의|이메일 보내기