Transport Layer Security (TLS)

Joohyun·2022년 2월 28일
0

Transport Layer Security (TLS)

  • 인터넷에서의 정보를 암호화해서 송수신하는 프로토콜
  • SSL(Secure Sockets Layer)에 기반한 기술이라 SSL이라고도 부름 (진짜 SSL은 현재 사용X)

HTTPS

  • TLS를 사용해 암호화된 연결을 하는 HTTP
  • 기본 포트 또한 80번이 아닌 443번 사용

TLS : 다양한 종류의 보안 통신을 하기 위한 프로토콜 (HTTP, FTP, SMTP 등 포함)
HTTPS : TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜

Protocol

  • 디바이스 간의 통신을 위한 규율

TLS 동작 프로세스

TLS 인증서

  • 웹 사이트나 응용 프로그램이 TLS를 사용하기 위해서는 원본 서버에 TLS 인증서가 설치되어 있어야 함 (SSL 인증서라고도 부름)
  • 공개 키, 도메인 소유자에 대한 중요한 정보를 포함 (신원 확인에 필요)

TLS Handshake

  • TLS 연결은 TLS Handshake로 알려진 일련의 순서를 사용하여 초기화됨
  • 사용자가 TLS를 사용하는 웹 사이트를 돌아다니면 사용자 장치와 웹 서버 간에 TLS Handshake시작
  • 구체적으로 서로의 신원을 확인하고 통신 암호화에 사용할 세션 키를 공유


그림 출처 : https://m.blog.naver.com/tkdldjs35/221314601362

1. 클라이언트에서 서버에 ClientHello 메시지 전송

  • 클라이언트에서 가능한 TLS 버전, 서버 도메인, 세션 식별자, 암호 설정 등의 정보 포함

2. 클라이언트의 메시지를 받은 서버는 ServerHello 메시지를 클라이언트에게 전송

  • ClientHello 메시지의 정보 중 서버에서 사용하기로 선택한 TLS 버전, 세션 식별자, 암호 설정 등의 정보가 포함

3. 서버가 클라이언트에 Certificate 메시지 전송 (서버 인증서)

  • 전송이 끝나면 ServerHelloDone 메시지를 보내 끝났음을 알림

4. 클라이언트는 서버에서 받은 인증서를 검증

  • 유효 기간, 해당 서버에게 발급된 인증서가 맞는지 등을 확인

5. 클라이언트는 암호화된 pre-master secret(세션키 틀)을 ClientKeyExchange 메시지에 포함시켜 서버에 전송

  • 클라이언트는 임의의 pre-master secret(세션키 틀)을 생성한 뒤, 서버가 보낸 인증서에 포함된 공개 키를 사용해 암호화

6. 서버는 전송받은 정보를 복호화하여 pre-master secret을 알아낸 뒤, 이 정보를 사용해 master secret을 생성

  • 그 뒤 master secret에서 세션 키를 생성해내며, 이 세션 키는 앞으로 서버와 클라이언트 간의 통신을 암호화하는데 사용
  • 클라이언트 역시 자신이 만들어낸 pre-master secret을 알고 있으므로, 같은 과정을 거쳐 세션 키를 스스로 만듦
  • 이제 서버와 클라이언트는 각자 동일한 세션 키를 가지고 있으며, 이 키를 사용해 대칭키 암호를 사용하는 통신을 진행
  • 따라서 우선 서로에게 ChangeCipherSpec 메시지를 보내 앞으로의 모든 통신 내용은 세션 키를 사용해 암호화해 보낼 것을 알려준 뒤, Finished 메시지를 보내 각자의 핸드셰이킹 과정이 끝났음을 알린다.

이제 서버와 클라이언트 간에 보안 통신이 구성된다.

출처 : 나무위키 (TLS)

profile
IOS Developer

0개의 댓글