HTTP/HTTPS 그리고 TLS HandShake

박진형·2022년 3월 31일
0

Network

목록 보기
1/4

HTTP, HTTPS

HTTP

HTTP란 인터넷 상에서 클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약이다.
현재 까지 HTTP/1.1을 가장 보편적으로 사용하고 있으며 HTTP/3부터 UDP를 기반으로 통신한다.

HTTP 프로토콜은 통신을 함에 있어서 메시지를 암호화하지 않고 평문으로 주고 받기 때문에 쉽게 외부로 부터 도청당할 수 있다. 이 문제를 개선하기 위해 등장한 것이 바로 HTTPS다.

HTTPS

HTTPS는 HTTP에 SSL/TLS와 같은 보안 계층을 추가해 개선한 방식의 프로토콜이다.
HTTP에 비해 속도는 비교적 느리나 비교적 보안적으로 안전하다.
HTTPS는 요청/응답의 헤더와 바디 모두 암호화 하여 전송한다.

SSL/TLS


SSL/TLS는 응용계층과 전송계층 사이에 위치하며, TLS는 SSL 3.0 버전을 기반으로 계승해 만든 것으로 인증, 암호화, 무결성을 지원한다.

대칭키, 공개키 암호화 방식

대칭키 암호화 방식

대칭키 암호화방식은 암호화 할 때 사용하는 키와 복호화할 때 사용하는 키가 같은 암호화 방식
공개키 암호화 방식에 비해 속도가 빠르지만 비교적 덜 안전하다.
DES, 3-DES, AES, SEED, ARIA, MASK 등이 대칭키 암호화 방식을 사용한다.

공개키 암호화 방식

공개키 암호화 방식은 암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 공개키와 비밀키로 서로 다른 키인 비대칭 암호화 방식이다.
대칭키 암호화방식에 비해 속도가 느리지만 비교적 더 안전한 방식이다.
RSA, Elgamal 등이 이와 같은 방식이다.

SSL 인증서, CA

SSL/TLS를 적용하기 위해서는 인증서가 필요하다.
이 인증서는 CA의 정보와 서버측의 공개키와 공개키 암호화 방식 등의 정보를 담고 있다.
이 인증서를 발급해주고 보증하는 기업을 CA라고 하는데 이 CA는 영향력이 있고 신뢰할 수 있는 기업만이 가능하다.

TLS HandShake

HTTPS에서는 빠르고 안전한 통신을 위해 위 두 방식을 섞어 사용한다.
데이터를 주고받을 때는 대칭키 방식을 사용하고 이 대칭키를 안전하게 전달하기 위해서는 공개키 방식을 사용한다.

  1. Client Hello
    클라이언트가 서버로 메시지를 전송하며 핸드셰이크를 개시한다.
    이 메시지에는 클라이언트가 지원하는 TLS버전, 지원되는 암호화 방식, 난수값, 세션ID 등이 들어있다.

  2. Server Hello
    사용할 TLS버전, 사용할 암호화 알고리즘, 난수값, 인증서를 포함한 메시지를 보내 응답한다.

  3. Certificate
    클라이언트는 서버로부터 받은 인증서를 발행 기관을 통해 검증한다.

  • 브라우저는 CA의 공개키를 알고 있다.
  • 인증서에 적힌 CA에 해당하는 공개키로 인증서를 복호화 한다.
  • 이 과정에서 복호화가 된다면 CA에 의해 인증 되었음을 뜻한다.
    이 과정을 통해서 인증서에 있는 서버측의 공개키를 획득한다.
  1. Pre-master secret exchange
    클라이언트는 Pre-master secret이라는 키를 생성해서 이전 과정에서 얻은 서버측의 공개키로 암호화하여 서버로 보낸다.

  2. Session Key
    이렇게 해서 서버는 Pre-master secret을 개인키로 복호화하고 클라이언트와 서버는 이 키를 공유하게 되었다. 그리고 이 키를 Master secret을 만들고 이 Master secret을 통해 이후 데이터 송수신 시에 사용될 Session Key(대칭키)를 생성한다.

  3. Client "finished"
    클라이언트는 Finished 메시지를 서버측으로 보내면서 지금 까지 교환 내역을 해시한 값을 대칭키로 암호화 하여 전송한다.

  4. Server "finished"
    서버도 해시를 생성해 클라이언트가 보낸 값과 일치하는지 확인하고 일치하다면 Finished 메시지를 대칭키로 암호화하여 클라이언트로 보낸다.

  5. 이후 SSL/TLS 세션 동안 서버와 클라이언트는 위에서 생성한 대칭키로 암호화, 복호화 해 데이터를 주고 받는다.

0개의 댓글