[Network] HTTP&HTTPS

sbj·2024년 1월 15일
0

Network - 네트워크

목록 보기
2/2

2024년 1월 7일

2024년 1월 14일


1. HTTP(HyperText Transfer Protocol) 하이퍼텍스트 전송 프로토콜

  • HTTP란 HTML과 같은 문서를 가져오기 위한 프로토콜(통신규약)이다. 웹 데이터 교환의 기초이며, 요청이 수신자(일반적으로 웹 브라우저)에 의해 시작된다.
  • HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.
  • 이런 보안 문제를 해결해주는 프로토콜: HTTPS

클라이언트와 서버는 데이터 스트림이 아닌, 개별 메시지를 교환하여 통신한다. 일반적으로 웹 브라우저 (=클라이언트)가 보내는 메시지를 requests(요청) 이라고 하며, 요청에 대한 응답으로 서버가 보내는 메시지를 responses(응답) 이라고 한다.


2. HTTP Message

HTTP 메시지는 서버와 클라이언트간에 데이터가 교환되는 방식이다. 두 가지 방식이 있다.

2.1 HTTP Requests

(1) requests (요청): 클라이언트가 서버에게 전달해서 어떠한 ‘action’이 일어나게끔 하는 메시지

2.2 HTTP Responses

(2) responses (응답): 서버로 부터 그에 대한 응답을 말한다.

HTTP요청은 유저가 웹 자산과 상호작용 할 때, 유저의 브라우저에서 생성된다.

예를 들면 유저가 하이퍼링크를 클릭하면 → 브라우저는 페이지에 표시되는 콘텐츠를 위해 일련의 “HTTP GET” 이라는 요청을 보낸다.

  1. 만약 사용자가 구글에 “What is HTTP?”를 검색할 경우, 결과를 보여준다. → 유저가 링크를 클릭할 때 → 페이지에 렌더링 되어야 할 필수적인 정보를 얻기 위해, 일련의 HTTP Request를 생성하여 전송할 것임.
  2. 이 HTTP 요청들은 원본 서버로 전달되거나 프록시 캐싱 서버로 전달된다. 그러면 서버는 HTTP response를 생성하고. HTTP responses 는 HTTP의 요청에 응답한다.

What does a typical HTTP request look like? (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

HTTP에서는 이렇게 모든 데이터가 누구나 읽을 수 있도록 보내진다.


2. HTTPS(HyperText Transfer Protocol Secure)

  • HTTPS의 ‘S’는 보안을 의미한다.
  • HTTPS는 웹사이트의 인증과 통신의 암호화를 지원한다. 웹 사이트의 인증은 사용자가 실제로 가짜 사이트가 아니라, 실제 사이트에 방문하고 있음을 확인하는 수단이다.
  • HTTPS는 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약이다.

HTTPS는 TLS, SSL을 사용하여 HTTP 요청 및 응답을 암호화 하므로, 공격자는 텍스트 대신 a bunch of random 문자를 보게될 것이다.

하기 텍스트 대신

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는 어떻게 작동하는가?

HTTPS는 PKI(공개 키 인프라) 라고 하는 기술에 기반한다. PKI는 공개 키 암호호 및 디지털 서명을 사용한다. ‘키 쌍’은 웹 사이트 소유자가 만들고, 공개키는 CA(인증기관)라고 하는 신뢰할 수 있는 기관으로 전송된다.

그러면 기관은 공개 키에 서명하고, 디지털 인증서라는 문서가 생성된다. 이제 웹 사이트는 비공개 키와 공개 키를 보관하는 SSL 인증서를 보유한다.

디지털 인증서는 웹 사이트의 진위를 확인하는 신뢰 및 유효성 검사 체인을 제공한다. HTTS는 보안 프로토콜과 함께 작동해 웹 브라우저와 웹 서버간의 통신, 민감한 데이터를 암호화하고 해독한다.

SSL 인증서

SSL 인증서는 웹 서버와 사용자 브라우저 간의 안전한 연결을 보장하는 데 사용되는 작은 데이터 파일이다. 이 파일에는 암호화 키 정보가 포함되어 있다. 이 암호화 키 정보는 웹 서버와 브라우저 간의 연결이 안전하게 유지되도록 하는 데 사용된다. 따라서, 인증서를 보유하고 있는 웹 사이트는 사용자 정보를 안전하게 보호할 수 있다. 특히 민감한 정보를 다루는 은행, 온라인 쇼핑몰에서 주로 사용된다.

웹 브라우저를 클릭하면 순식간에 이동하는데 그 사이에 SSL 인증서 발급이 가능하다고?

사용자가 웹 페이지를 로딩할 때 매번 SSL 인증서가 생성되는 것은 아니다. SSL 인증서는 웹 서버에 사전에 설치되어 있으며, 이는 웹 서버의 설정 변경과 인증서 발급기관(CA)에 의한 검증 및 인증서 발급 등의 과정을 거쳐 이뤄진다.

사용자가 HTTPS를 이용해 웹사이트에 접속하면, 웹 서버는 이미 발급 받아서 저장해놓은 SSL 인증서를 클라이언트에게 제공한다. 클라이언트는 이 인증서를 통해 웹서버의 신뢰성을 확인하고, 서버와의 통신에 사용할 암호화 키를 생성하는 등의 보안 절차를 수행한다. 이 모든 과정은 매우 빠르게 이루어져 사용자가 웹 페이지 로딩 속도에 크게 영향을 느끼지 않는다.


HTTPS 통신흐름

HTTP와 같은 단계를 사용하나. 중간 단계를 사용해 두 흐름을 구분한다.

단계설명
1. 사용자가 URL을 웹 브라우저에 입력사용자가 웹사이트를 방문하기 위해 URL을 입력한다.
2. 암호화 동작브라우저와 웹 서버가 암호화 동작을 수행한다. CA를 통해 생성된 웹 서버의 공개 및 비공개 키 쌍을 사용해 TLS 프로토콜에서 복잡한 암호화 기능을 수행한다. 웹 사이트를 인증하고, 클라이언트용 키와 서버용 키 두 개(세션 키)를 새로 만든다. 세션키로 메시지를 암호화하고 해독한다.
3. 클라이언트가 서버로 HTTP 요청 메시지 전송클라이언트는 웹 서버로 리디렉션되는 요청 메시지를 작성한다. 메시지에는 요청 엔터티와 같은 요청에 대한 추가 정보가 포함된다. HTTP와 달리 요청 메시지를 작성한 후 브라우저에서 메시지를 보내기 전에 HTTPS 요청은 세션 키를 사용해 메시지를 암호화해야 한다.
4. 웹 서버가 HTTPS 응답을 클라이언트로 다시 전송요청이 수신되면, 웹 서버는 세션 키를 사용해 메시지를 해독하고 읽는다. 이후, 웹 서버는 다시 응답 메시지를 작성하고, 세션 키를 사용해 암호화한 후 브라우저로 다시 보낸다.
5. 브라우저에서 메시지 렌더링암호화된 메시지를 수신하면 브라우저는 세션 키를 사용해 암호를 해독하고 메시지를 읽는다. 브라우저에서 응답 메시지를 렌더링하고 브라우저에 웹 페이지를 표시한다.

HTTP와 HTTPS의 차이

HTTPS 기능설명
웹 사이트 인증HTTPS는 apple.com이 Apple Inc.의 웹사이트인 것처럼 사이트의 진위를 알 수 있도록 웹사이트를 인증한다.
데이터 암호화TLS(Transport Layer Security) 프로토콜 (SSL의 후속버전)을 사용해 웹 트래픽을 암호화 함으로써, 클라이언트와 웹 서버 사이에서 민감한 정보를 보호한다.

🧟‍♂️ 그래서 궁극적인 차이는 무엇인가

HTTPS는

  1. HTTP의 보안이 강화된 버전임
  2. SSL 프로토콜을 사용해서, 클라이언트 ↔ 서버간의 통신을 암호화함
  3. 따라서, 데이터를 주고받을 때 제 3자가 정보를 볼 수 없도록 보호해줌

결국, HTTP와 HTTPS의 가장 근본적인 차이는 ‘보안’에 있다. HTTP는 암호화되지 않아 정보를 가로챌 수 있지만, HTTPS는 안전하게 정보를 암호화하여 통신한다.


HTTPS라고 해서 안전한가?

그렇지 않다. 웹 브라우저와 웹 사이트 사이에서 통신을 암호화해 안전한 연결을 제공하는 프로토콜이다. 보안적인 측면에서 전송 중의 데이터를 보호하는 중요한 수단이지만, 웹 사이트의 전반적인 안정성이나 신뢰성을 보장하는 것은 아니다.
사용자와 웹 사이트 사이에서 전송되는 데이터를 권한이 없는 사람이 조작하거나 가로챌 수 없도록 보장하는 것 뿐.


📌 Summary

  • HTTP와 HTTPS의 가장 큰 차이는 무엇인가요?
    • HTTP는 HTML과 같은 문서를 가져오기 위한 프로토콜(통신규약)이다. 텍스트 교환이므로, 누군가 가로챈다면 데이터가 노출될 수 있다. 이러한 보안 문제를 해결해주는 게 HTTPS이다.
  • HTTPS는 어떻게 웹사이트의 보안을 강화하는가요?
    • SSL 프로토콜을 사용해서 전송중인 데이터를 암호화한다. PKI(공개 키 인프라) 기술에 기반하여, ‘키 쌍’을 웹 사이트 소유자가 만들고 공개키는 CA(인증기관)으로 전송된다.
    • 그럼 CA는 공개키에 서명하고, 디지털 인증서라는 문서가 생성되는데, 웹 사이트는 비공개 키와 공개키를 보관하는 SSL 인증서를 보유한다.
    • HTTP의 경우, 클라이언트는 웹 서버로 요청 메시지를 작성하는데, HTTP와 달리 HTTPS는 요청 메시지를 작성한 후 브라우저에서 메시지를 보내기 전에 HTTPS 요청은 세션키를 사용해서 메시지를 암호화한다.
  • HTTP 메시지는 어떤 두 가지 방식으로 데이터를 교환하는가요?
    • ‘요청’, ‘응답’의 두 가지 방식으로 데이터를 교환한다.
  • SSL 인증서는 어떤 역할을 하는가요?
    • 웹 서버와 브라우저 간의 안전한 연결을 보장하는 데 사용된다. SSL 인증서에는 암호화 키 정보가 포함되어 있고, 암호화 키 정보는 웹 서버와 브라우저 간 연결이 안전하게 유지되도록 하는 데 사용된다.
profile
Strong men believe in cause and effect.

0개의 댓글