HTTP와 HTTPS

김수혁·2024년 1월 8일

OS

목록 보기
4/6

1. HTTP


HTTP란?

HTTP(Hyper Text Transfer Protocol)
HTTP란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.

  • 인터넷 초기에 모든 웹 사이트에서 기본적으로 사용되었던 프로토콜이다.
  • 80번 포트를 기본적으로 사용하고 있다.
  • 현재는 구글에서 모든 사이트에 HTTPS 방식을 사용하라고 요구했으며 HTTP를 사용할 경우 안전하지 않음 경고 문구가 나오도록 되어있다.

프로토콜?
컴퓨터 내부에서 또는 컴퓨터 사이에 데이터 교환 방식을 정의하는 규칙 세계
기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구하며 이런 형식을 정의하는 규칙의 집합이다.

HTTP의 구조

HTTP는 어플리케이션 레벨의 프로토콜이다.
따라서 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않은 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.

HTTP의 단점

  • Http는 암호화가 되지 않은 PlainText를 전송하는 프로토콜이기 때문에 HTTP로 비밀번호나 주민등록처럼 중요한 정보를 주고 받으면 제 3자가 해당 내용을 조회할 수 있다.
    즉, 보안이 좋지 않다.

2. HTTPS


HTTPS란?

HTTPS(Hyper Text Transfer Protocol Secure)
HTTPS는 HTTP 프로토콜에 암호화(보안)이 추가된 프로토콜이다.

  • 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원한다.
  • 443 포트를 사용한다.
  • SSL(보안 소켓 계층)을 이용하여 HTTP의 보안상 문제를 해결하였으며 SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있도록 도와주고 서버 브라우저가 민감한 정보를 주고 받을 때도 도난당하는 것을 막아준다.

SSL

Secure Socket Layer로 암호화 기반 인터넷 보안 프로토콜이다. 현재는 TLS(Transport Layer Security) 프로토콜이 사용되고 있다.

SSL의 특징

  • 제 3자로부터 전송되는 데이터를 숨긴다.
  • 정보를 교환하는 당사자가 요청된 당사자임을 보장한다.
  • 데이터가 위조되거나 변조되지 않았는지 확인이 가능하다.

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

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

대칭키 암호화

  • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행한다.
  • 키가 노출되면 매우 위험하지만 연산 속도가 빠르다.
  • AES, DES와 같은 알고리즘이 있다.

비대칭키 암호화

  • 암호화 복호화 하는 과정에서 공개 키와 개인 키가 따로 사용되며 암호화된 데이터는 공개 키로만으로는 복호화가 불가능하다.

공개키
모두에게 공개 가능한 키로 서버가 클라이언트에게 제공하여 클라이언트는 암호화해서 서버에 데이터를 보낸다.

개인키
자신만이 알면서 가지고 있는 키로 클라이언트가 공개 키로 암호화하여 보낸 데이터를 개인 키로만 복호화 할 수 있다. 개인 키는 외부에 노출될 위험이 적다.

어떻게 암호화 하느냐에 따라 얻을 수 있는 효과가 다르다.

  • 개인키 암호화 : 개인키로 암호화하면 공개키로만 복호화 할 수 있다. 공개키는 모두에게 공개되어 있기 때문에, 내가 인증했음을 알려 신뢰성을 보장할 수 있다.
  • 공개키 암호화 : 공개키로 암호화 하면 개인키로만 복호화 할 수 있다. 개인키는 자신만 가지고 있기 때문에 보안이 높다.

HTTPS 동작 과정

  1. 서버와 클라이언트 간에 세션키를 교환한다.

    세션키란?
    주고 받는 데이터를 암호화하기 위해 사용되는 대칭키

세션키를 대칭키로 사용하는 이유는 데이터 간의 교환에는 빠른 연산 속도가 필요하기 때문이다.
서버와 클라이언트가 세션키를 공유할 때, 안전하게 공유하기 위해 비대칭키를 사용한다.
이후, 데이터를 교환하는 과정은 대칭키인 세션키를 통해 이루어지며 이를 통해 빠르게 연산이 가능하다.

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

profile
안녕안녕안녕

0개의 댓글