본문 바로가기

CS

[CS] HTTP / HTTPS

HTTP(HyperText Transfer Protocol)란?

클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜(규약,약속)

  • 특징
    • 단방향성 : 서버가 먼저 응답을 보낼 수 없고 클라이언트가 요청을 보내야만 응답할 수 있다.
    • 비연결성(connectionless) : 클라이언트의 요청으로 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결을 종료한다.
    • 따라서, 실시간 통신을 할 수 없다.
  • 문제점
    • HTTP는 평문 통신이기 때문에 도청이 가능하다.
    • 통신 상대가 검증된 상대인지 확인하지 않기 때문에 위장이 가능하다.
    • 완전성을 증명할 수 없기 때문에 변조가 가능하다.
  • 이러한 문제점을 해결하기 위해 HTTPS가 등장한다.

HTTPS(HTTP Secure)란?

  • HTTP(HyperText Transfer Protocol)의 보안(Secured)버전
  • SSL/TLS 프로토콜을 사용해 HTTP를 암호화하여 주고 받을 때 쓰는 통신 프로토콜

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

HTTPS는 대칭/비대칭키 암호화 방식 모두 사용하며 각각의 특징은 아래와 같다.

  • 대칭키 암호화
    • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
    • 키가 노출되면 매우 위험하지만 연산 속도가 빠름
  • 비대칭키 암호화
    • 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
    • 키가 노출되어도 비교적 안전하지만 연산 속도가 느림

비대칭키 암호화는 공개키/개인키 암호화 방식을 이용해 데이터를 암호화하고 있다. 공개키와 개인키는 서로를 위한 1쌍의 키이다.

  • 공개키: 모두에게 공개가능한 키
  • 개인키: 나만 가지고 알고 있어야 하는 키

암호화를 공개키로 하느냐 개인키로 하느냐에 따라 얻는 효과가 다른데, 공개키와 개인키로 암호화하면 각각 다음과 같은 효과를 얻을 수 있다.

  • 공개키 암호화: 공개키로 암호화를 하면 개인키로만 복호화할 수 있다. -> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.
  • 개인키 암호화: 개인키로 암호화하면 공개키로만 복호화할 수 있다. -> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.

HTTPS의 동작 과정

HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 얻고 있다.

  • HTTPS 연결 과정(Hand-Shaking)에서는 먼저 서버와 클라이언트 간에 세션키를 교환한다.

  • 여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며,
    데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어진다.

  • 문제는 이 세션키를 클라이언트와 서버가 어떻게 교환할 것이냐 인데, 이 과정에서 비대칭키가 사용된다.

  • 즉, 처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되는 것이고,
    이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것이다.

정리

HTTP는 클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜,
HTTPS는 HTTP에 SSL/TLS 프로토콜을 이용해 암호화하여 주고 받을 때  사용하는 통신 프로토콜

  • HTTP는 암호화가 추가되지 않았기 때문에 보안에 취약하다.
  • HTTPS는 안전하게 데이터를 주고받을 수 있다. 하지만 HTTPS를 이용하면 암호화/복호화의 과정이 필요하기 때문에 HTTP보다 비교적 속도가 느리다. 또한 HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생하다.

그렇다면 언제 HTTP를 쓰고, 언제 HTTPS를 쓰는 것이 좋겠는가?

  • 개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용한다.
  • 노출이 되어도 괜찮은 단순한 정보 조회 등 만을 처리하고 있다면 HTTP를 이용하면 된다.

참조

[Web] HTTP와 HTTPS의 개념 및 차이점

22년 11월 25일 TIL

 

 

'CS' 카테고리의 다른 글

[CS] 소프트웨어 개발 방법론  (0) 2023.04.19
[CS] 보안 문제점  (0) 2023.04.19
[CS] 자주 사용하는 알고리즘과 자료구조  (0) 2023.04.18
[CS] REST / RESTful API  (0) 2023.04.17
[CS] 프로세스와 스레드  (0) 2023.04.14