[CS] 25) HTTP와 HTTPS

songh·2024년 3월 9일
0

CS지식

목록 보기
26/35
post-thumbnail

HTTP

HTTP가 무엇인가

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

HTTP의 구조

HTTP는 애플리케이션 계층의 프로토콜로, TCP/IP 위에서 동작한다. HTTP는 상태를 가지지 않은 Stateless 프로토콜이며 method, path, version of protocol, headers, body가 있다. 다만 http는 암호화되지 않은 평문 데이터를 전송하는 프로토콜이므로 http로 비밀번호나 주민등록번호를 주고받으면 제 3자가 조회할 수 있다는 문제가 있다. 따라서 이런 문제를 해결하기 위해 HTTPS가 나왔다.

HTTPS

HTTPS가 무엇인가

Hyper Text Transfer Protocol over Secure Socket Layer의 약자로 HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다.

SSL(Secure Socket Layer : 보안소켓 계층)
신뢰할 수 있는 제 3자가 발행한 인증서로 별도로 발급한 암호화키를 가지고 발신자와 수신자가 서로 암호화된 통신을 하는 규악을 말한다.

HTTP는 HTTPS와 달리 443번 포트번호를 사용하고 있고 네트워크 상에서 중간에서 제 3자가 정보를 볼 수 없도록 암호화를 지원한다. 특히 대칭키 알고리즘과 공개키 알고리즘을 모두 사용하고 있다.

대칭키 암호화 방식은 클라이언트와 서버가 동일한 키로 암호화하고 복호화하는 방법이고, 키가 노출되면 매우 위험하나 연산속도가 빠르다. 비대칭키 암호화 방식은 1개 쌍으로 구성된 공개키와 개인키를 암호화와 복호화하는데 사용된다. 키가 노출되어도 안전하지만 연산속도가 느리다.

여기서 공개키는 모두에게 공개가능한 키고 개인키는 나만 가지고 알고 있어야하는 키다.

HTTPS 동작과정

대칭키와 공개키 암호화 방식을 모두 사용하므로 빠른 연산속도를 가지고 안정성을 가진다. HTTPS 연결과정에서 먼저 서버와 클라이언트는 세션키를 교환하게 된다. 이때 세션키는 주고받는 데이터를 암호화하기 위해 사용하는 대칭키로 데이터 간 교환에는 빠른 연산속도가 필요하므로 세션키는 대칭키로 만들어진다.

이 세션키를 클라이언트와 서버가 교환할때, 여기서 비대칭키가 사용된다.
처음 연결 성립을 하는 과정에서 안전하게 세션키를 공유하기 위해 비대칭키를 사용하게 된다. 이후 데이터 교환과정에서 빠른 연산속도를 위해 대칭키가 사용된다.

클라이언트와 서버의 연결성립 과정

  1. 클라이언트가 서버로 최초 연결시도를 하고
  2. 서버는 인증서를 브라우저에게 넘겨준다.
  3. 브라우저는 인증서의 유효성을 검사하고 세션키를 발급한다.
  4. 브라우저는 세션키를 보관하고 이 세션키를 서버의 공개키로 세션키를 암호화해 서버로 전송한다,
  5. 서버는 개인키로 암호화된 세션키를 복호화해서 세션키를 얻는다.
  6. 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터 전달할때 세션키로 암호화하고 복호화를 진행한다.

HTTPS 발급 과정

서버가 비대칭키를 발급받을 때에는, 서버가 클라이언트와 세션키를 공유하기 위해 공개키를 생성해야하는데, 일반적으로는 인증된 기관에서 공개키를 전송해서 인증서를 발급받는다.

  1. A기업에서 HTTP 기반 애플리케이션에 HTTPS 적용을 위해 공개키/개인키를 발급한다.
  2. CA기업에게 돈 지불 후, 공개키를 저장하는 인증서 발급을 요청한다.
  3. CA기업은 CA기업 이름, 서버 공개키, 서버 정보 등 기반으로 인증서 생성
  4. A기업은 클라이언트에게 암호화된 인증서를 제공
  5. 클라이언트는 CA기업의 공개키를 미리 다운받아서 암호화된 인증서를 복호화한다.
  6. 암호화된 인증서를 복호화해 얻은 A기업의 공개키로 세션키를 공유한다,

HTTPS는 안전하게 데이터를 주고받을 수 있으나 HTTPS를 사용하면 암호화와 복호화 과정이 필요하기에 HTTP보다 속도가 느리다. 또 인증서를 발급하고 유지하기 위한 추가비용이 발생한다. 따라서 민감한 데이터를 주고받는다면 HTTPS를 이용해야하나, 노출이 되어도 괜찮은 정보라면 HTTP를 이용하면 된다.

0개의 댓글

관련 채용 정보