CS 및 면접 질문

HTTP와 HTTPS의 차이점

ho-bolt 2022. 8. 13. 15:29

🤔 HTTP(Hyper Text Transfer Protocol)이란?

  • 서버/클라이언트 모델을 따라 데이터를 주고 받기 위환 프로토콜이다.
  • HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로 80포트를 사용하고 있다.
  • HTTP 서버는 80번 포트에서 요청을 기다리고 있고 클라는 80포트로 요청을 보내게 된다.

🔨 HTTP의 구조

=> HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 동작한다.
=> HTTP는 상태를 유지하지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성되어 있다.

출처: https://mangkyu.tistory.com/98

  • 하지만 HTTP는 암호화가 되지 않는 평문 데이터를 전송하는 프로토콜이라 비밀번호, 주민번호와 같은 데이터를 주고 받으면 제 3자가 조회가능할 수 있었기 때문에 이를 방지하기 위해 HTTPS가 등장하게 되었다.

📣 HTTPS (Hyper Text Transfer Protocol Secure) 란?

  • HTTP에 데이터 암호화가 추가된 프로토콜이다.
  • HTTPS는 443 포트를 사용한다.
  • 네트워크 상에서 제 3자가 데이터 정보를 볼 수 없도록 암호화를 지원한다.

🎆 대칭키 암호화와 비대칭키 암호화

=> HTTPS는 대칭키, 비대칭키 암호화 방식을 모두 사용한다.

  • 대칭키
    • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행
    • 키가 노출되면 위험하지만 연산처리속도가 빠른 장점이 있다.
  • 비대칭키
    • 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는 데 사용함
    • 키가 노출되어도 비교적 안전하나 연산처리속도가 느린 단점이 있다.

🎨 공개키와 캐인키

=> 공개키 : 모두에게 공개가능한 키
=> 개인키 : 나만 알고 있는 키

여기서 암호화를 공개키로 하냐, 개인키로 하냐에 따라서 얻는 효과가 다른데, 각각 아래와 같은 효과를 얻을 수가 있다.

  • 공개키로 암호화 : 공개키로 암호화를 진행하면 개인키로만 복호화를 할 수 있다.
    => 즉 개인키는 나만 가지고 있어 나만 볼 수 있는 것
  • 개인키로 암호화 : 개인키로 암호화를 진행하면 공개키로만 복호화할 수 있다.
    => 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.

HTTPS의 동작과정

HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 얻고 있다.
HTTPS 연결 과정(Hand-shaking)에서 먼저 서버와 클라이언트 간 세션 키를 교환한다. 여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터 간 교환에는 빠른 연산 속도가 필요해 세션키는 대칭키로 만들어진다.

여기서 문제가 있는데 세션키를 클라이언트와 서버가 어떻게 교환하는 냐이다. 이 과정에서 사용되는 것이 비대칭키이다

처음 연결을 성립해 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용된다. 그 후 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것

HTTPS 연결 과정 성립 흐름

  1. 브라우저가 서버로 최초 연결 시도
  2. 서버가 공개키(인증서)를 브라우저에게 넘겨줌
  3. 브라우저가 인증서의 유효성 검사하고 세션키 발급
  4. 서버는 개인키로 암호화된 세션키를 복호화해 세션키 얻음
  5. 클라이언트는 서버와 동일한 세션키를 공유해 데이터를 전달할 때 세션키로 암호화/복호화함

🎁 HTTPS 발급과정

위 과정에서 추가로 알아야하는 부분은 서버가 비대칭키를 발급받는 과정이다. 서버는 클라이언트와 세션키를 공유하기 위한 공개키를 만들어야 하는 데 이때 인증된 기관(Certificate Authority)에 공개키를 전송하여 인증서를 발급받는다.

과정

  1. A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키 발급
  2. CA 기업에게 돈을 지불하고 공개키를 저장하는 인증서의 발급을 요청
  3. CA 기업은 CA 기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고, CA 기업의 개인키로 암호화하여 A 기업에게 제공
  4. A 기업은 클라이언트에게 암호화된 인증서 제공
  5. 브라우저는 CA 기업의 공개키를 미리 다운받아 갖고 있어 암호화된 인증서를 복호화함
  6. 암호화된 인증서를 복호화하여 얻은 A 기업의 공개키로 세션키를 공유
  • 인증서는 CA의 개인키로 암호화 되어있어 신뢰성 확보
  • 클라이언트는 A기업의 공개키로 데이터를 암호화했기 때문에 A 기업만 복호화하여 원본의 데이터를 얻을 수 있음
  • 인증서에는 A기업의 공개키가 포함되어있어 A 기업의 공개키라고 봐도 무방
  • 브라우저에는 인증된 CA 기관의 정보들이 사전에 등록되어 있어 인증된 CA 기관의 인증서가 아닐 경우 아래와 같으 브라우저에서 보여진다.

 

 

참조 : https://mangkyu.tistory.com/98

728x90