HTTP란?
HTTP(Hyper Text Transfer Protocol)
- 서버와 클라이언트간에 데이터를 주고 받는 프로토콜
- 텍스트, 이미지, 영상, JSON 등 다양한 형태의 데이터를 전송할 수 있다.
- 80번 포트를 사용한다.
HTTP의 구조
HTTP는 보안적으로 안전한가?
HTTP 통신은 클라이언트와 서버간의 통신에 있어서 별다른 보안 조치가 없기 때문에 누군가 네트워크 신호를 가로챈다면 HTTP의 내용은 그대로 외부에 노출된다.
HTTPS란?
HTTPS(Hyper Text Transfer Protocol Secure)
- HTTP에 데이터 암호화가 추가된 프로토콜
- HTTP + SSL
- 443번 포트를 사용한다.
등장 배경
HTTP 통신의 보안적 문제점을 해결하기위해 등장했다.
대칭키 암호화와 비대칭키 암호화
HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다.
-
대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행한다.
- 키가 노출되면 매우 위험하지만 연산 속도가 빠르다.
-
비대칭키 암호화
- 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용한다.
- 키가 노출되어도 비교적 안전하지만 속도가 느리다.
→ HTTPS는 빠른 연산속도와 안정성을 모두 얻고 있다.
동작 과정
HTTPS 연결 과정에서 먼저 서버와 클라이언트 간에 세션키를 교환한다. 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터의 교환에는 빠른 연산 속도가 필요하므로 대칭키로 만든다. 그리고 이 세션키를 서버와 클라이언트가 교환할 때는 비대칭키가 사용된다.
- 클라이언트가 서버로 연결 시도를 한다.
- 서버는 공개키(인증서)를 브라우저에게 넘겨준다.
- 브라우저는 인증서의 유효성을 검사하고 세션키를 발급한다.
- 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송한다.
- 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻는다.
- 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행한다.
HTTPS의 발급 과정
서버는 클라이언트와 세션키를 공유하기 위한 공개키를 생성해야 하는데, 일반적으로는 인증된 기관(CA : Certificate Authority)에 공개키를 전송하여 인증서를 발급받는다.
- A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키를 발급해야한다.
- CA 기업에게 돈을 지불하고, 공개키를 저장하는 인증서의 발급을 요청한다.
- CA기업은 CA기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고, CA 기업의 개인키로 암호화하여 A기업에게 이를 제공한다.
- A기업은 클라이언트에게 암호화된 인증서를 제공한다.
- 브라우저는 CA기업의 공개키를 미리 다운받아 갖고 있어, 암호화된 인증서를 복호화 할 수 있다.
- 인증서를 복호화하여 얻은 A기업의 공개키로 세션키를 암호화해 전송한다.
정리
HTTP는 속도가 빠르지만 보안 문제에 취약하다 → 노출이 되어도 괜찮은 단순 정보 조회 등 처리할때 이용
HTTPS는 보안이 우수하지만 암호화/복호화 과정 때문에 속도가 느리다. 인증서 발급과 유지를 위한 추가 비용도 발생한다. → 개인정보와 같은 민감한 데이터를 주고받을때 사용
참고 사이트
[Web] HTTP와 HTTPS의 개념 및 차이점