HTTP와 HTTPS의 차이점
🤔 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 연결 과정 성립 흐름
- 브라우저가 서버로 최초 연결 시도
- 서버가 공개키(인증서)를 브라우저에게 넘겨줌
- 브라우저가 인증서의 유효성 검사하고 세션키 발급
- 서버는 개인키로 암호화된 세션키를 복호화해 세션키 얻음
- 클라이언트는 서버와 동일한 세션키를 공유해 데이터를 전달할 때 세션키로 암호화/복호화함
🎁 HTTPS 발급과정
위 과정에서 추가로 알아야하는 부분은 서버가 비대칭키를 발급받는 과정이다. 서버는 클라이언트와 세션키를 공유하기 위한 공개키를 만들어야 하는 데 이때 인증된 기관(Certificate Authority)에 공개키를 전송하여 인증서를 발급받는다.
과정
- A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키 발급
- CA 기업에게 돈을 지불하고 공개키를 저장하는 인증서의 발급을 요청
- CA 기업은 CA 기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고, CA 기업의 개인키로 암호화하여 A 기업에게 제공
- A 기업은 클라이언트에게 암호화된 인증서 제공
- 브라우저는 CA 기업의 공개키를 미리 다운받아 갖고 있어 암호화된 인증서를 복호화함
- 암호화된 인증서를 복호화하여 얻은 A 기업의 공개키로 세션키를 공유
- 인증서는 CA의 개인키로 암호화 되어있어 신뢰성 확보
- 클라이언트는 A기업의 공개키로 데이터를 암호화했기 때문에 A 기업만 복호화하여 원본의 데이터를 얻을 수 있음
- 인증서에는 A기업의 공개키가 포함되어있어 A 기업의 공개키라고 봐도 무방
- 브라우저에는 인증된 CA 기관의 정보들이 사전에 등록되어 있어 인증된 CA 기관의 인증서가 아닐 경우 아래와 같으 브라우저에서 보여진다.