TLS/SSL HandShake

Lami·2022년 11월 20일
0

CS

목록 보기
7/9
post-thumbnail

개요

HTTPS는 HTTP 메시지를 TCP로 보내기 전에 먼저 그것들을 암호화하는 보안 계층으로 보낸다.

TLS와 SSL

네스케이프에 의해 SSL이 발명되었고, 점차 폭넓게 사용되다 표준화 기구인 IETF의 관리로 변경되며 TLS라는 이름으로 바뀌었지만 TLS라는 이름보다 SSL이라는 이름이 많이 사용되고 있다.

👉🏻 TLS와 SSL은 같은 말이다.

SSL HandShake 개요

만약 URL이 https 스킴을 갖고 있다면 암호화된 HTTP 메시지를 보낼 수 있다. 메시지를 보내기 전에 클라이언트와 서버는 SSL HandShake를 한다.

이때, 다음과 같은 일들이 일어난다.

  • 프로토콜 버전 번호 교환
  • 양쪽이 알고 있는 암호 선택
  • 양쪽의 신원을 인증
  • 채널을 암호화하기 위한 임시 세션 키 생성

SSL HandShake

HandShake를 통해 SSL 인증서를 주고받는다.
SSL은 공개키와 대칭키의 장점을 혼합한 방법을 사용한다.

과정

1. Client Hello : 클라이언트가 서버에 접속한다.

  • 주고받는 정보
    - 클라이언트 측에서 생성한 랜덤 데이터
    - 클라이언트가 지원하는 암호화 방식들
    - 세션 아이디

2. Server Hello : Client Hello 에 대한 서버의 응답

  • 주고받는 정보
    - 서버 측에서 생성한 랜덤 데이터
    - 서버가 선택한 클라이언트의 암호화 방식
    - 인증서

3. 클라이언트가 서버의 인증서가 CA에 의해서 발급된 것인지 확인

확인하기 위해 클라이언트에 내장된 CA 리스트 확인 위해 클라이언트에 내장된 CA의 공개키를 이용해서 인증서 복호화
👉🏻 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임이 보증됨

CA?
인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장하는 역할을 한다. 이 역할을 하는 민간기업들이 있는데 이런 기업들을 CA(Certificate authority) 혹은 Root Certificate 라고 부른다.
SSL을 통해서 암호화된 통신을 제공하려는 서비스는 CA를 통해서 인증서를 구입해야 한다. CA는 서비스의 신뢰성을 다양한 방법으로 평가하게 된다.

클라이언트는 2번 과정인 Server Hello 과정에서 받은 서버의 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합해서 pre master secret 라는 키를 생성

⚠️ 이때 사용하는 암호화 기법은 대칭키이기 때문에 pre master secret 값은 노출되어서는 안 된다.

그럼 이 값을 어떻게 서버에 전달하나?
👉🏻 공개키 방식을 사용한다.

서버의 공개키로 pre master secret 값을 암호화해서 서버로 전송 👉🏻 서버는 자신의 비공개키로 안전하게 복호화 가능

서버의 공개키는 어떻게 구하나?
👉🏻 서버로부터 받은 인증서 안에 들어있다.

4. 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화

  • 서버와 클라이언트 모두 pre master secret 값을 공유한다.
  • 서버와 클라이언트 모두 pre master secret 값을 master secret 값으로 만든다.
  • master secret 는 session key를 생성하고 그 key 값을 이용해서 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화를 한 후에 주고받는다.
  • session key를 클라이언트와 서버 모두 공유하게 된다.

5. 종료

클라이언트와 서버 모두 HandShake의 종료를 서로에게 알린다.

profile
삶이 온통 사람의 길이니 많은 경험을 해보고 싶은 프론트엔드 개발자 지망생입니다.

0개의 댓글