CS/네트워크

TLS/SSL HandShake

이충무 2022. 9. 20. 23:02

TLS(Transport Layer Security)


개요

  • 인터넷 상의 의사소통을 위한 개인정보와 데이터 보안을 용이하게 하기 위해 설계된 보안 프로토콜
  • 웹 사이트를 로드하는 웹 브라우저와 같은 웹 응용 프로그램과 서버 간의 커뮤니케이션을 암호화 할 때 사용
  • 이메일, 메시지, VoIP와 같은 커뮤니케이션 암호화에도 사용
  • 국제 표준 기구인 IETF(Internet Engineering Task Force)에 의해 제안되어 1999년에 발표
  • TLS를 통해 암호화, 인증, 무결성 보장 가능
    • 암호화 : 제 3자로부터 전송되는 데이터 숨김
    • 인증 : 정보를 교환하는 당사자가 요청된 당사자임을 보장
    • 무결성 : 데이터가 위조되거나 변조되지 않았는지 확인

TLS와 SSL

  • TLS는 Netscape가 개발한 SSL(Secure Sockets Layer)에서 발전된 보안 프로토콜
  • TLS 1.0 버전은 SSL 3.1 버전을 바탕으로 개발
  • SSL의 경우 2015년 공식적으로 사용 종료
  • TLS와 SSL의 명칭을 혼용

HTTPS(Hypertext Transfer Protocol Secure)

  • HTTP에서의 통신을 안전하게 보호하기 위한 구조
  • 웹 브라우저와 웹 서버에서 인터넷 뱅킹, 신용카드 관련 서비스, 개인정보 등록 및 수정 처럼 보안이 주용한 경우 HTTPS 사용
  • HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것
HTTP  HTTPS
응용계층에서 동작 전송 계층에서 동작
default 통신 포트번호 80 default 통신 포트 번호 443
암호화 체계가 없음 TLS/SSL을 사용해 암호화, 복호화

TLS/SSL HandShake


개요

  • TLS HandShake는 TLS 암호화를 사용해 통신 세션을 실행하는 프로세스
  • 통신하는 양쪽은 TLS HandShake 중에 메시지를 교환해 서로를 인식하고 검증하며 사용할 암호화 알고리즘을 구성하고 세션키를 합의
  • TLS HandShake는 HTTPS 작동원리의 근간
  • 사용자가 HTTPS를 통해 웹 사이트를 탐색하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리하기 시작할 때 발생
  • API 호출 및 DNS 쿼리를 포함하는 HTTPS를 사용할 때도 발생
  • HTTPS는 TCP 기반의 프로토콜이기 때문에 TLS HandShake에 앞서 연결을 생성하기 위해 3-Way HandShake 실행

작동 과정

  1. 클라이언트가 서버로 client hello 메시지를 전송하며 HandShake 시작. TLS 버전, 암호화 알고리즘, 압축 방식, 무작위 바이트 문자열 등의 암호화된 정보를 같이 전송.
  2. client hello 메시지에 대한 응답으로 server hello 메시지 전송. 서버에서 클라이언트가 전송한 암호화 알고리즘과 압축 방식을 받고 session ID, SSL 인증서(CA 공개 인증서)를 server hello 메시지와 함께 전송. SSL 인증서에는 클라이언트에서 HandShake 과정 속 암호화에 사용할 공개키 포함.
  3. 클라이언트는 서버에서 보낸 SSL 인증서를 인증서 발행기관을 통해 검증.
  4. 클라이언트는 SSL 인증서에 대한 신뢰성이 확보되었다면 무작위 바이트 문자열을 생성하여 서버의 공개키를 이용해 암호화하여 전송. 무작위 바이트 문자열은 대칭키를 정하고 메시지 통신의 암호화에 사용.
  5. 서버에서 클라이언트 인증서를 요청한 경우 클라이언트는 인증서와 함께 클라이언트 개인키로 암호화된 무작위 바이트 문자열 전송.
  6. 서버는 클라이언트 인증서를 확인하고 전송 받은 무작위 바이트 문자열을 서버의 개인키로 복호화 후 대칭 마스터 키 생성에 활용.
  7. 클라이언트는 HandShake 과정이 완료되었다는 Finished 메시지를 서버에 전송. 그동안 주고 받은 메시지 교환 내역들을 해싱 후 대칭키로 암호화하여 함께 전송.
  8. 서버도 메시지 교환 내역들을 해싱하고 클라이언트에서 전송받은 값과 일치하는지 확인. 일치한다면 서버에서 Finished 메시지를 생성한 대칭키를 이용해 암호화하여 클라이언트에게 전송.
  9. 클라이언트는 해당 메시지를 대칭키로 복호화해 서로 통신이 가능한 신뢰받은 사용자라는 것을 인지하여 클라이언트와 서버는 해당 대칭키로 데이터 통신 가능.

HTTPS 통신과정 쉽게 이해하기 #3(SSL Handshake, 협상)

[네트워크] TLS & SSL Handshake