07
20

 

 

 

 

이 글은 TLS 핸드셰이크란 무엇일까요? 를 제가 보기 좋게 ! 정리한 것 입니다.

 

 

 

 

 

TLS 핸드셰이크

 

TLS 핸드셰이크는 TCP 연결이 TCP 핸드셰이크를 통해 열린 후에 발생한다.

 

1. "클라이언트 헬로" 메시지: 클라이언트가 서버로 "헬로" 메시지를 전송하면서 핸드셰이크를 개시한다.

  • 클라이언트가 지원하는 TLS 버전, 암호화 방식, 클라이언트가 생성한 랜덤 문자열을 전달

 

2. "서버 헬로" 메시지: 서버가 클라이언트 헬로 메시지에 대한 응답을 한다.

  • 서버의 SSL 인증서, 클라이언트의 암호화 방식 중에서 서버가 선택한 암호화 방식, 서버가 생성한 랜덤 문자열을 전달

 

3. CA 인증: 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관(CA)을 통해 검증한다.

  • 정상적인 서버인지, 정상적인 인증서인지 확인한다.
  • 크롬, 사파리 등 브라우저에는 CA 목록이 내장되어 있다.
  • SSL 인증서를 CA의 공개키로 복호화 (인증서는 CA의 개인키로 암호화되어 있음) ⇒ 인증서 안에는 서버의 공개키가 있음

 

4. 예비 마스터 암호: 클라이언트가 "예비 마스터 암호"라고 하는 무작위 바이트 문자열을 하나 더 전송한다.

  • 클라이언트는 클라이언트의 랜덤 문자열, 서버의 랜덤 문자열을 섞어서 임시 대칭키, 예비 마스터 암호(pre master secret)를 만듦
  • 임시 대칭키를 서버의 공캐키로 암호화하여 전달 (서버의 개인키로만 해독 가능)

 

5. 개인 키 사용: 서버가 예비 마스터 암호를 해독한다.

 

6. 세션 키 생성: 클라이언트, 서버 각각 클라이언트/서버 무작위, 예비 마스터 암호를 이용해 세션 키를 생성한다.

  • 클라이언트, 서버 모두 같은 결과가 나와야 한다.
  • 서버, 클라이언트는 모두 일련의 과정을 거쳐서 premaster secret 값을 master secret 값으로 만듦
  • master secret 으로 세션 키를 생성하여 이후에는 세션 키(대칭키)를 이용하여 통신

 

7. 클라이언트 준비 완료: 클라이언트가 세션 키로 암호화된 "완료" 메시지를 전송한다.

 

8. 서버 준비 완료: 서버가 세션 키로 암호화된 "완료" 메시지를 전송한다.

 

9. 안전한 대칭 암호화 성공: 핸드셰이크가 완료되고, 세션 키를 이용해 통신이 계속 진행된다.

  • 데이터의 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알리고, 세션 키를 폐기한다.

 

 

 

 

 

대칭키 / 비대칭키

  • 대칭 키 : 같은 키로 암복호화 가능.
  • 비대칭키 : 같은 키로 암복호화 불가능. 공개키 비밀키로 암복호화
    • 공개키 : 대중에게 공개된 키. 공개키로 암호화된 내용은 비밀키로만 복호화가 가능하다.
    • 비밀키(개인키) : 개인만 가지고 있는 키. 비밀키로 암호화된 내용은 공개키로만 복호화가 가능하다.
  • 비대칭키로 대칭키를 전달하고, 대칭키로 통신한다. 비대칭키로 항상 통신하기엔 리소스가 너무 많이 든다.

 

 

 

 

 

참고

 

 

 

'CS > 네트워크' 카테고리의 다른 글

OSI 7계층이란?  (0) 2022.06.11
동기/비동기와 블로킹/논블로킹  (0) 2022.05.22
웹소켓(Websocket)이란?  (0) 2022.01.19
COMMENT