2024년 1월 7일
2024년 1월 14일
HTTP
란 HTML과 같은 문서를 가져오기 위한 프로토콜(통신규약)이다. 웹 데이터 교환의 기초이며, 요청이 수신자(일반적으로 웹 브라우저)에 의해 시작된다.클라이언트와 서버는 데이터 스트림이 아닌, 개별 메시지를 교환하여 통신한다. 일반적으로 웹 브라우저 (=클라이언트)가 보내는 메시지를
requests(요청)
이라고 하며, 요청에 대한 응답으로 서버가 보내는 메시지를responses(응답)
이라고 한다.
HTTP 메시지는 서버와 클라이언트간에 데이터가 교환되는 방식이다. 두 가지 방식이 있다.
(1) requests (요청): 클라이언트가 서버에게 전달해서 어떠한 ‘action’이 일어나게끔 하는 메시지
(2) responses (응답): 서버로 부터 그에 대한 응답을 말한다.
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에서는 이렇게 모든 데이터가 누구나 읽을 수 있도록 보내진다.
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는 PKI(공개 키 인프라) 라고 하는 기술에 기반한다. PKI는 공개 키 암호호 및 디지털 서명을 사용한다. ‘키 쌍’은 웹 사이트 소유자가 만들고, 공개키는 CA(인증기관)라고 하는 신뢰할 수 있는 기관으로 전송된다.
그러면 기관은 공개 키에 서명하고, 디지털 인증서라는 문서가 생성된다. 이제 웹 사이트는 비공개 키와 공개 키를 보관하는 SSL 인증서를 보유한다.
디지털 인증서는 웹 사이트의 진위를 확인하는 신뢰 및 유효성 검사 체인을 제공한다. HTTS는 보안 프로토콜과 함께 작동해 웹 브라우저와 웹 서버간의 통신, 민감한 데이터를 암호화하고 해독한다.
SSL 인증서는 웹 서버와 사용자 브라우저 간의 안전한 연결을 보장하는 데 사용되는 작은 데이터 파일이다. 이 파일에는 암호화 키 정보가 포함되어 있다. 이 암호화 키 정보는 웹 서버와 브라우저 간의 연결이 안전하게 유지되도록 하는 데 사용된다. 따라서, 인증서를 보유하고 있는 웹 사이트는 사용자 정보를 안전하게 보호할 수 있다. 특히 민감한 정보를 다루는 은행, 온라인 쇼핑몰에서 주로 사용된다.
사용자가 웹 페이지를 로딩할 때 매번 SSL 인증서가 생성되는 것은 아니다. SSL 인증서는 웹 서버에 사전에 설치되어 있으며, 이는 웹 서버의 설정 변경과 인증서 발급기관(CA)에 의한 검증 및 인증서 발급 등의 과정을 거쳐 이뤄진다.
사용자가 HTTPS를 이용해 웹사이트에 접속하면, 웹 서버는 이미 발급 받아서 저장해놓은 SSL 인증서를 클라이언트에게 제공한다. 클라이언트는 이 인증서를 통해 웹서버의 신뢰성을 확인하고, 서버와의 통신에 사용할 암호화 키를 생성하는 등의 보안 절차를 수행한다. 이 모든 과정은 매우 빠르게 이루어져 사용자가 웹 페이지 로딩 속도에 크게 영향을 느끼지 않는다.
HTTP와 같은 단계를 사용하나. 중간 단계를 사용해 두 흐름을 구분한다.
단계 | 설명 |
---|---|
1. 사용자가 URL을 웹 브라우저에 입력 | 사용자가 웹사이트를 방문하기 위해 URL을 입력한다. |
2. 암호화 동작 | 브라우저와 웹 서버가 암호화 동작을 수행한다. CA를 통해 생성된 웹 서버의 공개 및 비공개 키 쌍을 사용해 TLS 프로토콜에서 복잡한 암호화 기능을 수행한다. 웹 사이트를 인증하고, 클라이언트용 키와 서버용 키 두 개(세션 키)를 새로 만든다. 세션키로 메시지를 암호화하고 해독한다. |
3. 클라이언트가 서버로 HTTP 요청 메시지 전송 | 클라이언트는 웹 서버로 리디렉션되는 요청 메시지를 작성한다. 메시지에는 요청 엔터티와 같은 요청에 대한 추가 정보가 포함된다. HTTP와 달리 요청 메시지를 작성한 후 브라우저에서 메시지를 보내기 전에 HTTPS 요청은 세션 키를 사용해 메시지를 암호화해야 한다. |
4. 웹 서버가 HTTPS 응답을 클라이언트로 다시 전송 | 요청이 수신되면, 웹 서버는 세션 키를 사용해 메시지를 해독하고 읽는다. 이후, 웹 서버는 다시 응답 메시지를 작성하고, 세션 키를 사용해 암호화한 후 브라우저로 다시 보낸다. |
5. 브라우저에서 메시지 렌더링 | 암호화된 메시지를 수신하면 브라우저는 세션 키를 사용해 암호를 해독하고 메시지를 읽는다. 브라우저에서 응답 메시지를 렌더링하고 브라우저에 웹 페이지를 표시한다. |
HTTPS 기능 | 설명 |
---|---|
웹 사이트 인증 | HTTPS는 apple.com이 Apple Inc.의 웹사이트인 것처럼 사이트의 진위를 알 수 있도록 웹사이트를 인증한다. |
데이터 암호화 | TLS(Transport Layer Security) 프로토콜 (SSL의 후속버전)을 사용해 웹 트래픽을 암호화 함으로써, 클라이언트와 웹 서버 사이에서 민감한 정보를 보호한다. |
HTTPS는
결국, HTTP와 HTTPS의 가장 근본적인 차이는 ‘보안’에 있다. HTTP는 암호화되지 않아 정보를 가로챌 수 있지만, HTTPS는 안전하게 정보를 암호화하여 통신한다.
그렇지 않다. 웹 브라우저와 웹 사이트 사이에서 통신을 암호화해 안전한 연결을 제공하는 프로토콜이다. 보안적인 측면에서 전송 중의 데이터를 보호하는 중요한 수단이지만, 웹 사이트의 전반적인 안정성이나 신뢰성을 보장하는 것은 아니다.
사용자와 웹 사이트 사이에서 전송되는 데이터를 권한이 없는 사람이 조작하거나 가로챌 수 없도록 보장하는 것 뿐.