HTTP가 안전하지 않은 이유는? | HTTP와 HTTPS의 비교

HTTP 요청과 응답은 일반 텍스트로 전송되므로 누구나 읽을 수 있습니다. HTTPS에서는 TLS/SSL 암호화를 사용하여 이 문제를 해결합니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • HTTP 작동 방식 이해
  • HTTP가 안전하지 않은 이유 알아보기
  • HTTP와 HTTPS의 차이점 설명
  • HTTPS용 SSL 인증서를 받는 방법 알아보기

관련 콘텐츠


계속 알아보시겠어요?

인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!

Cloudflare가 개인 데이터를 수집하고 처리하는 방법은 Cloudflare의 개인정보 취급방침을 참조하세요.

글 링크 복사

Cloudflare의 무료 SSL/TLS를 사용하여 보안 및 신뢰도 향상

HTTP와 HTTPS: 차이점은 무엇일까요?

HTTPS암호화 및 인증이 있는 HTTP입니다.두 프로토콜의 유일한 차이점은 HTTPS는 TLS(SSL)를 사용하여 일반 HTTP 요청과 응답을 암호화하고 해당 요청과 응답에 디지털 서명을 한다는 점입니다.그 결과로 HTTPS는 HTTP보다 훨씬 더 안전합니다.HTTP를 사용하는 웹 사이트의 URL은 http://, HTTPS를 사용하는 웹 사이트는 https://입니다.

HTTP와 HTTPS 비교

HTTP란 무엇입니까?

HTTP는 하이퍼텍스트 전송 프로토콜의 약자로, 네트워크를 통해 데이터를 전송하는 데 사용되는 프로토콜 또는 정보를 표현하기 위한 규정된 순서와 구문입니다. 웹 사이트 콘텐츠 및 API 호출을 포함하여 인터넷을 통해 전송되는 대부분의 정보는 HTTP 프로토콜을 사용합니다. HTTP 메시지에는 요청과 응답이라는 두 가지 주요 유형이 있습니다.

OSI 모델(OSI 모델이란? 참조)에서 HTTP는 계층 7 프로토콜입니다.

HTTP 요청이란? HTTP 응답이란?

HTTP 요청은 사용자가 웹 자산과 상호 작용할 때 사용자의 브라우저에서 생성됩니다. 예를 들어 사용자가 하이퍼링크를 클릭하면 브라우저는 해당 페이지에 표시되는 콘텐츠에 대해 일련의 "HTTP GET" 요청을 전송합니다. 누군가가 "What is HTTP?"를 검색하여 이 문서가 검색 결과에 표시될 경우, 링크를 클릭하면 브라우저에서 페이지 렌더링에 필요한 정보를 얻기 위해 일련의 HTTP 요청을 생성하여 전송합니다.

이러한 HTTP 요청은 모두 원본 서버 또는 프록시 캐싱 서버로 전달되며, 해당 서버에서는 HTTP 응답을 생성합니다. HTTP 응답은 HTTP 요청에 대한 응답입니다.

일반적인 HTTP 요청은 어떤 모습일까요?

HTTP 요청은 HTTP 프로토콜을 따르는 일련의 텍스트 줄입니다. GET 요청은 다음과 같이 보일 수 있습니다:


GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

사용자의 브라우저에서 생성된 이 텍스트 섹션은 인터넷을 통해 전송됩니다. 문제는 연결을 모니터링하는 모든 사람이 읽을 수 있는 일반 텍스트로 이렇게 전송된다는 것입니다. (HTTP 프로토콜에 익숙하지 않은 분들은 이 글을 이해하기 어려울 수 있지만, 프로토콜의 명령어와 구문에 대한 기본적인 지식이 있는 분이라면 누구나 쉽게 이 글을 읽을 수 있습니다.)

이는 사용자가 웹 사이트나 웹 애플리케이션을 통해 중요한 데이터를 제출할 때 특히 문제가 됩니다. 이 데이터는 비밀번호나 신용카드 번호나 양식에 입력된 기타 데이터일 수 있으며, HTTP에서는 이 모든 데이터가 누구나 읽을 수 있도록 일반 텍스트로 전송됩니다. (사용자가 양식을 제출하면 브라우저에서는 이를 HTTP GET 요청이 아닌 HTTP POST 요청으로 변환합니다.)

원본 서버에서는 HTTP 요청을 받으면 이와 유사한 HTTP 응답을 보냅니다:


HTTP/1.1 200 OK
Date: Wed, 30 Jan 2019 12:14:39 GMT
Server: Apache
Last-Modified: Mon, 28 Jan 2019 11:17:01 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain

Hello World!

웹 사이트에서 HTTPS 대신 HTTP를 사용하는 경우 세션을 모니터링하는 모든 사람이 모든 요청과 응답을 읽을 수 있습니다. 기본적으로 악의적인 공격자는 요청 또는 응답에 포함된 텍스트를 읽고 누군가가 어떤 정보를 요청하고 보내며 받는지 정확히 알 수 있습니다.

HTTPS란 무엇입니까?

HTTPS의 S는 "보안"을 의미합니다. HTTPS는 TLS(또는 SSL)를 사용하여 HTTP 요청과 응답을 암호화하므로 위의 예에서 공격자는 텍스트 대신 무작위로 보이는 문자를 보게 됩니다.

대신:


GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

공격자는 다음과 같은 것을 보게 됩니다.


t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

HTTPS에서 TLS/SSL은 HTTP 요청과 응답을 어떻게 암호화할까요?

TLS는 공개 키 암호화라는 기술을 사용: 두 개의 , 공개 키와 개인 키가 있으며, 공개 키는 서버의 SSL 인증서를 통해 클라이언트 장치와 공유됩니다. 클라이언트가 서버와의 연결을 열면 두 장치는 공개 키와 개인 키를 사용하여 세션 키라는 새 키에 동의하여 두 장치 간의 추가 통신을 암호화합니다.

모든 HTTP 요청과 응답이 이 세션 키로 암호화되므로 통신을 가로채는 사람은 일반 텍스트가 아닌 임의의 문자 문자열만 볼 수 있습니다.

암호화 및 키 작동 방식에 대한 자세한 내용은 암호화란?을 참조하세요

HTTPS는 웹 서버 인증에 어떻게 도움이 될까요?

인증은 사람이나 기계가 자신이 주장하는 실체인지 확인하는 것을 의미합니다. HTTP에서는 신뢰 원칙에 따라 신원을 확인하지 않습니다. HTTP 설계자들이 모든 웹 서버를 암묵적으로 신뢰하기로 결정한 것은 아니며, 당시에는 보안보다 다른 우선순위가 있었을 뿐입니다. 하지만 최신 인터넷에서는 인증이 필수적입니다.

신분증으로 개인의 신원을 확인하는 것처럼 개인 키로 서버의 신원을 확인합니다. 클라이언트가 원본 서버와 채널을 열 때(예: 사용자가 웹 사이트로 이동할 때) 웹 사이트의 SSL 인증서에 있는 공개 키와 일치하는 개인 키를 소유하고 있으면 해당 서버가 실제로 웹 사이트의 합법적인 호스트임이 증명됩니다. 이렇게 하면 인증이 없을 때 발생할 수 있는 여러 가지 공격을 방지하거나 차단할 수 있습니다.

또한 SSL 인증서는 인증서를 발급한 인증 기관에서 디지털 서명을 합니다. 따라서 서버가 자신이 주장하는 서버가 맞는지 확인할 수 있습니다.

Cloudflare에서는 웹 사이트에서 HTTPS를 채택하도록 어떻게 지원할까요?

Cloudflare는 2014년에 Universal SSL을 출시했으며, SSL 인증서를 무료로 제공한 최초의 기업입니다. Cloudflare 서비스에 가입한 모든 웹 사이트는 클릭 한 번으로 HTTPS를 활성화하고 HTTP에서 벗어날 수 있습니다. 따라서 인터넷에서 사용자와 사용자 데이터를 보호하기 위해 TLS 암호화를 널리 사용할 수 있습니다.

HTTP와 HTTPS에 대해 자세히 알아보려면 혼합 콘텐츠란?을 참조하세요