HTTP와 HTTPS의 차이
HTTP(Hyper Text Transfer Protocol)
- HTTP의 개요
- 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.
- 즉, HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용한다.
- HTTP의 구조
- 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
- HTTP는 상태를 가지고 있는 읺는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성 된다.
- HTTP의 문제점
- 암호화가 되지 않은 평문 데이터를 전송하기에 제3자가 조회 할 수 있다.
- 비밀번호나 주민번호와 같은 민감한 데이터일 경우 큰 문제가 될 수 있다.
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)
- HTTPS의 개요
- HTTP의 경우 서버에서 클라이언트로 데이터를 보낼 때 데이터가 암호화 되지 않는 문제점을 보완하기 위한 프로토콜
- HTTP over TLS, HTTP over SSL, HTTP Secure 등으로 불리는 HTTPS는 HTTP에 데이터 암호화가 추가 된 프로토콜이다.
- 433번 포트를 사용하며, 네트워크 상에서 제3자가 정보를 볼 수 없도록 공개키 암호화를 지원한다.
- 공개키/개인키(비대칭키 암호화) 방식을 이용한다.
공개키/개인키(비대칭키 암호화)
- 공개키와 개인키는 서로를 위한 1쌍의 키이다.
- 공개키: 모두에게 공개 가능한 키
- 개인키: 나만 가지고 알고 있어야 하는 키
- 공개키와 개인키로 암호화 했을 때의 효과
- 공개키 암호화: 공개키로 암호화하면 개인키로만 복호화 할 수 있다. -> 개인키는 나만 가지고 있으므로, 나만 볼 수 있음
- 개인키 암호화: 개인키로 암호화하면 공개키로만 복호화 할 수 있다. -> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장 할 수 있다.
HTTPS의 동작 과정
- HTTPS는 SSL과 같은 프로토콜을 사용하여 공개키/개인키 기반으로 데이터를 암호화하고 있다.
- 데이터는 암호화 되어 전송되기에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능하다.
- 서버는 클라이언트가 요청을 보낼 때 암호화를 하기 위한 공개키를 생성해야 하는데, 일반적으로 인증된 기관(Certificate Authority) 에 공개키를 전송하여 인증서를 발급받고 있다. 자세한 과정은 다음과 같다.
- 1) A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키를 발급함
- 2) CA 기업에게 돈을 지불하고, 공개키를 저장하는 인증서의 발급을 요청함
- 3) CA 기업은 CA기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고, CA기업의 개인키로 암호화하여 A기업에게 이를 제공함
- 4) A기업은 클라이언트에게 암호화된 인증서를 제공함
- 5) 브라우저는 CA기업의 공개키를 미리 다운받아 갖고 있어, 암호화된 인증서를 복호화함
- 6) 암호화된 인증서를 복호화하여 얻은 A기업의 공개키로 데이터를 암호화하여 요청을 전송함
- 암호화된 인증서는 CA의 개인키로 암호화 되었기 때문에, 신뢰성을 확보할 수 있고, 클라이언트는 A기업의 공개키로 데이터를 암호화하였기 때문에 A기업만 복호화하여 원본의 데이터를 얻을 수 있다.
HTTPS 동작 과정 정리
- 클라이언트가 브라우저로 국민은행 사이트에 접속 하면 브라우저는 주요 CA인증기관의 리스트와 공개키를 이미 보유하고 있으므로 국민은행의 인증서를 풀 수 있다.
- 인증서에는 CA주체 기관, subject(국민은행), subject의 공개키, 유효기관이 포함되어 있다.
- 이를 통해 브라우저는 서버에 데이터를 전송 할 때 국민은행의 공개키로 암호화하여 보내게 된다.
- 국민은행은 개인키로 복호화하여 데이터를 안전하게 볼 수 있다.
- 국민은행 서버에서 개인키로 암호화하여 클라이언트에게 데이터를 보내도 클라이언트는 공개키로 복호화하여 안전하게 볼 수 있다.
언제 HTTP와 HTTPS를 사용하는게 좋은가?
- HTTPS의 장점
- 안전하게 데이터를 전송 가능
- HTTPS의 단점
- 암/복호화 과정이 필요하기 HTTP에 비해 속도가 느리다.(오늘날에는 차이를 못느낄정도)
- 인증서를 발급하고 유지하기 위한 추가 비용이 발생한다.
- 따라서 개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용해야 하지만, 단순한 정보 조회 등만을 처리한다면 HTTP를 사용하면 된다!