본문 바로가기

Web Sever 개발과 CS 기초/네트워크 지식

HTTPS 필요성과 TLS Handshake 과정

개요 목적

이번 시간에는 HTTP 보안 취약성과  해결책인 HTTPS에 대해서 알아본다,

HTTPS 통신을 하기 위한 TLS Handshake 과정에 대해서 알아본다.

HTTP의 문제점 (HTTPS 탄생 이유)

HTTP는 WEB 인터넷에서 데이터를 저장 전손하는 규칙 모음이다. (정해진 형태로 보내고 읽어야, 이것이 동영상 파일인지 문서 파일인지 바이트를 분석할 수 있다.)

HTTP의 보안 문제점은,

  • 요청과 응답을 일반 텍스트로(평문, 암호화되지 않는 메세지) 전송 한다. → 도청 가능
  • 통신 상대를 확인 하지 않는다 → 위장 가능
  • 완전성을 증명할 수 없다 → 중간에 변조 가능(중간자 공격 - 리퀘스트나 리스폰스를 빼앗아 변조)

HTTPS 역할과 보안 구조

HTTPS는 새로운 프로토콜이 아니라, HTTP를 TLS(SSL)을 사용하여, 보안성을 높인 HTTP 프로토콜이다.

  • TLS는 Netscape가 개발한 SSL(Secure Sockets Layer)에서 한단계 발전한 암호화 프로토콜이다.
  • SSL와 TLS는 HTTP 뿐만 아니라, 애플리케이션 계층에서 작동하는 SMTP, Telnet 등에서도 사용한다.

HTTPS 메세지 암호화 방식(하이브리드 암호 시스템)

HTTPS는 공통키를 통해서 메세지를 평문이 아닌 암호화한다.

하지만, 메세지 암호화와 복호화를 하는 공통키가 노출된다면 암호화하는 의미가 없다.

그래서, 공개키 암호 방식을 통해서, 공통기를 안전하게 교환한다.

공개키 암호화 과정은 먼저, A에서 서로 연관된, 비밀키와 공개키를 생성한다.(공개키로 암호한 것을 연관된 비밀키로만 풀 수 있다.)

그다음 공개키를 B에게 보낸다. B는 메세지 암호 복호에 쓰일 공통키를 공개키로 암호화해서 A에게 보낸다.

B에게 온 암호화된 공통키를 비밀키로 풀어서 A와 B만 아는 공통키를 전달할 수 있다.

공개키 방식은 공통키 방식보다, 처리 속도가 늦기 때문에, 공통키를 안전하게 전달하기 위한 수단으로 사용하고, 메세지를 암호화하는 데는 처리가 빠른 공통키를 사용한다.

통신 상대를 확인하는 증명서(공개키가 정확한 것인지 증명)

서버와 공개키 암호에도 통신하는 서버가 가짜일 수 있다는 문제가 존재한다.

이 문제를 해결하기 위해서 믿을만한 인증 기관이 발행하는 해당 서버의 증명서와 기본키를 이용하는 방법이 있다.

자세한 과정은 그림을 보면서 이해해보자.

TLS Handshake 과정 (HTTPS 통신을 맺기 위한)

먼저 TCP 통신을 통해, 통로를 생성한 후에 TLS Handshake를 시작한다.

1.  ClientHello

클라이언트가 Client Hello 메세지 전송과 함께 TLS 통신을 시작한다. 메세지 안에는 클라이언트가 사용하는 TLS 버전, 암호화 방식, 키 사이즈 등을 포함한다.

 

2.  ServerHello

서버가 TLS 통신이 가능한 경우, Server Hello 메세지로 응답한다. 서버도 TLS 버전과 클라이언트가 제공한 것 중에 암호화 방식과 키 사이즈 등을 메세지에 포함한다.

3.  Certificate

서버가 공개키(대칭키) 증명서를 포함해서 Certificate 메세지를 전송한다.

4.  ServerHelloDone

서버가 최초의 TLS 부분이 끝났음을 Server Hello Done메세지를 보내서 알린다.

 

5.  ClientKeyExchange

증명서가 맞는 지 확인되었으면, 클라이언트의 난수와 서버의 난수를 조합하여 공개키를 생성한다. 그리고 서버의 공개키로 암호화하여 서버에게 전송한다.

6.  ChangeCipherspec

이 메세지 이후 통신은 암호키를 사용해서 진행한다는 것을 나타낸다.

7.  Finished

클라이언트가 Finished 메세지를 전송한다. 이 메세지를 서버가 해석한다면, 암호키 전달이 잘 된 것이다.

 

8.  ChangeCipherSpec

서버에서도 이후 통신은 암호키를 사용한다는 것을 알린다.

9.  Finished

서버에서도 Finished 메세지를 전송한다.


Reference

https://sunrise-min.tistory.com/entry/TLS-Handshake는-어떻게-진행되는가?category=1055346

https://sunrise-min.tistory.com/entry/HTTPS란-무엇인가-TLSSSL-까지-살펴보자?category=1055346

https://www.ssl.com/ko/자주-묻는-질문/https-란/

그림으로 배우는 Http&Network Basic