HTTP와 HTTPS

hi2li·약 14시간 전

network

목록 보기
18/18
post-thumbnail

개요

인터넷을 사용하다 보면 거의 모든 웹사이트 주소 앞에는 http:// 또는 https://가 붙어 있다.

과거에는 HTTP를 사용하는 사이트도 많았지만, 현재는 대부분 HTTPS를 기본으로 사용한다. 심지어 최신 브라우저에서는 HTTP 사이트에 접속하면 "안전하지 않음(Not Secure)" 이라는 경고를 표시하기도 한다.


많은 사람들이 "HTTPS가 더 안전하다." 정도는 알고 있지만, 왜 안전한지, HTTP와 HTTPS는 정확히 무엇이 다른지, 그리고 TLS는 또 무엇인지는 헷갈리는 경우가 많다.

사실 HTTPS는 HTTP를 완전히 새롭게 만든 프로토콜이 아니다.

HTTP에 TLS라는 보안 계층을 추가하여 통신을 안전하게 만든 것이 HTTPS이다.

이번 글에서는 HTTP와 HTTPS의 차이를 쉽게 이해한 뒤, HTTPS가 내부적으로 어떻게 동작하는지까지 함께 알아보려고 한다.





1. HTTP와 HTTPS의 차이

HTTP와 HTTPS는 모두 웹 브라우저와 웹 서버가 데이터를 주고받기 위한 통신 규약(Protocol) 이다.

둘의 가장 큰 차이는 데이터를 암호화하여 전송하는지 여부이다.

HTTP란?

HTTP(HyperText Transfer Protocol)는 웹에서 가장 기본적으로 사용되는 통신 프로토콜이다.

브라우저가 서버에 웹 페이지를 요청하면 서버는 HTML, CSS, JavaScript, 이미지 등의 데이터를 HTTP를 통해 전달한다.

하지만 HTTP는 데이터를 평문(Plain Text) 으로 전송한다.

즉, 네트워크 중간에서 패킷을 확인할 수 있다면 요청과 응답 내용을 그대로 읽을 수 있다.


예를 들어 로그인 화면에서 아이디와 비밀번호를 HTTP로 전송한다면, 공격자는 이를 그대로 확인할 수도 있다.

또한 전송 중 데이터를 변경하거나 응답을 조작하는 공격도 가능하다.

대표적으로 다음과 같은 문제가 발생할 수 있다.

  • 패킷 스니핑
  • 로그인 정보 탈취
  • 세션 쿠키 탈취
  • 중간자 공격(MITM)
  • 데이터 변조



HTTPS란?

HTTPS(HyperText Transfer Protocol Secure)는 HTTP 위에 TLS(Transport Layer Security)를 추가한 프로토콜이다.

즉,

HTTPS = HTTP + TLS

라고 이해하면 된다.

여기서 중요한 점은 HTTPS가 HTTP를 대체하는 새로운 통신 방식이 아니라는 것이다.

먼저 TLS는 서버와 Handshake를 수행하여 통신에 사용할 세션 키를 안전하게 생성하고 TLS 세션(Session)을 구성한다.
이후부터는 TLS가 이 세션 키를 이용해 모든 HTTP 요청과 응답을 암호화·복호화하여 안전하게 전송한다.

즉, HTTPS는 앞에서 TLS가 안전한 통신 세션을 만들고 이후 모든 HTTP 데이터를 암호화하여 전송하는 구조**라고 이해하면 된다.



HTTPS는 단순히 데이터를 암호화하는 것뿐만 아니라 다음과 같은 보안 기능도 함께 제공한다.

  • 기밀성(Confidentiality) : 데이터를 다른 사람이 읽을 수 없도록 보호
  • 무결성(Integrity) : 전송 중 데이터가 변경되지 않았음을 보장
  • 인증(Authentication) : 접속한 서버가 진짜 서버인지 확인

다만 HTTPS를 사용한다고 해서 모든 사이트가 안전한 것은 아니다.

피싱 사이트도 HTTPS를 사용할 수 있으며,

HTTPS는 통신 구간을 보호하는 기술이지 웹사이트 자체의 신뢰성을 보장하는 기술은 아니다.



비유로 보는 HTTP와 HTTPS의 차이

HTTP는 봉투도 자물쇠도 없이 편지를 보내는 것과 같다.


반면 HTTPS는
1. 편지를 보내기 전에 서로만 알 수 있는 자물쇠의 비밀번호(세션 키)를 안전하게 만든다.
2. 그 이후부터는 모든 편지를 같은 자물쇠로 잠가 보내며, 상대방은 미리 공유한 비밀번호를 이용해 자물쇠를 열어 내용을 확인한다.
3. 따라서 중간에서 누군가 편지를 가로채더라도 비밀번호를 알지 못하면 자물쇠를 열 수 없으므로 내용을 확인할 수 없다.


즉, HTTPS는 먼저 TLS를 통해 서로만 사용할 세션 키를 안전하게 생성한 뒤,
이후에는 그 세션 키를 이용해 모든 HTTP 데이터를 암호화하여 주고받는 방식
이라고 이해하면 된다.





2. HTTPS는 어떻게 동작할까?

앞에서 HTTPS는 HTTP 위에 TLS를 추가한 프로토콜이라고 설명했다.

그렇다면 실제로 브라우저가 HTTPS 사이트에 접속하면 어떤 순서로 통신이 이루어질까?

많은 사람들이 HTTPS와 TLS를 서로 다른 통신 과정으로 생각하지만, 실제로는 **"TLS가 먼저 안전한 통신 환경을 만들고, 그 위에서 HTTP가 동작하는 연속적인 구조"이다.

즉,

HTTPS의 동작 과정 = TLS 연결 과정 + HTTP 통신 과정

이라고 이해하면 된다.




HTTP와 HTTPS의 내부 구조

HTTP는 다음과 같은 구조로 동작한다.

HTTP -> TCP -> IP



반면 HTTPS는 HTTP와 TCP 사이에 TLS 계층이 추가된다.

HTTP -> TLS -> TCP -> IP



즉, HTTP 요청 자체가 바뀌는 것은 아니다.

  1. 브라우저가 생성한 HTTP 요청(GET, POST, Cookie, JSON 등)은 TLS 계층에서 세션 키를 이용해 암호화된 후 서버로 전송된다.
  2. 서버는 수신한 데이터를 TLS 계층에서 복호화한 뒤, 원래의 HTTP 요청을 웹 서버에 전달하여 처리한다.

또한 TLS는 데이터를 암호화하는 것뿐만 아니라, 암호화 과정에서 데이터의 무결성을 확인하기 위한 검증 정보(예: Authentication Tag 또는 MAC)도 함께 생성한다.

서버는 이 검증 정보를 이용해 전송 중 데이터가 변경되지 않았는지 확인하며, 만약 중간에서 누군가 암호화된 데이터를 변조했다면 무결성 검증에 실패하여 해당 데이터는 폐기되고 연결이 종료된다.

따라서 HTTP는 웹 데이터를 생성하고 처리하는 역할을 담당하고, TLS는 그 데이터를 암호화하고 전송 중 데이터가 변경되지 않았는지까지 검증하여 안전하게 전달하는 역할을 담당한다.





그렇다면 인증서는 왜 필요할까?

여기까지 보면 "데이터를 암호화하면 안전한 것 아닌가?"라는 의문이 생길 수 있다.

하지만 암호화만으로는 충분하지 않다.

만약 공격자가 가짜 서버를 만들어 놓고 사용자가 그 서버와 암호화 통신을 하게 된다면, 통신 내용은 안전하게 암호화되어 있더라도 공격자와 통신하고 있는 것이 된다.

즉, HTTPS에서는 데이터를 암호화하는 것뿐만 아니라 '지금 접속한 서버가 진짜 서버인지' 확인하는 과정도 반드시 필요하다.

이를 위해 사용하는 것이 인증서(Certificate) 이다.



인증서는 서버의 신원을 증명하는 전자 문서이며, 신뢰할 수 있는 인증기관(CA, Certificate Authority) 가 발급한다.

브라우저는 서버가 전달한 인증서를 검증한 후,

  • 신뢰할 수 있는 인증기관이 발급했는지
  • 인증서가 만료되지 않았는지
  • 접속한 도메인과 인증서의 도메인이 일치하는지

등을 확인한다.

검증이 완료되면 브라우저는 해당 서버를 신뢰하고 TLS 연결을 계속 진행한다.

따라서 사용자는 신뢰할 수 있는 서버와 암호화 통신을 하고 있다는 점을 확인할 수 있다. 다만, 이것이 웹사이트 자체가 안전하거나 악성 기능이 없다는 것을 의미하는 것은 아니다





3. HTTP와 HTTPS 비교 정리

항목HTTPHTTPS
의미웹 통신 프로토콜HTTP + TLS
암호화
데이터 전송평문TLS로 암호화
기본 포트80443
인증서 사용
서버 인증
데이터 변조 방지
로그인 정보 보호취약안전





한 줄 정리

HTTP는 웹 데이터를 주고받는 통신 프로토콜이고, TLS는 그 통신을 안전하게 보호하는 보안 프로토콜이다.

HTTPS는 TLS가 먼저 안전한 암호화 통신 채널을 만든 뒤, 그 위에서 기존 HTTP 요청과 응답을 그대로 수행하는 방식이며, 이를 통해 기밀성, 무결성, 인증을 제공한다.

profile
Easy come , Easy go

0개의 댓글