HTTP ?
Hyper Text Transfer Protocol
- 서버와 클라이언트 사이에 요청과 응답을 주고 받는 프로토콜로
인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약 - 흔히 웹브라우저 주소창에 입력하는 웹 주소인 URL을 통해 요청과 응답이 이루어짐
- 실제 전송은 TCP를 통해 작동이 이루어지며 80번 포트를이용함
HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보냄
프로토콜 ?
컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계
HTTP 취약점
- HTTP는 상태를 가지고 있지 않는 무상태(Stateless) 프로토콜로,
Method, Path, Version, Headers, Body 등으로 구성됨 - 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜
서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는다는 것으로,
보안에 취약하다는 단점이 존재함
이러한 단점을 보완한 것이 HTTPS
HTTPS ?
HyperText Transfer Protocol Secure
- HTTP에 데이터 암호화가 추가된 프로토콜
- 인터넷 상에서 정보를 암호화하는 SSL(보안 소켓 계층) 프로토콜을 사용하여
클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약 - 443번 포트를 사용하며, 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 공개키 암호화를 지원
HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식(참고 링크)을 기반으로 데이터를 암호화하고 있음
그렇기에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능함
HTTPS 연결 과정(Hand-Shaking)에서는 먼저 서버와 클라이언트 간에 세션키를 교환함
여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며,
데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어짐
문제는 이 세션키를 클라이언트와 서버가 어떻게 교환할 것이냐 인데, 이 과정에서 비대칭키가 사용됨
즉, 처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되는 것이고,
이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것임
HTTPS 동작 과정
- 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
- 서버는 공개키(인증서)를 브라우저에게 넘겨줌
- 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
- 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
- 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
- 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함
추가적으로, 서버는 클라이언트가 요청을 보낼 때 암호화를 하기 위한 공개키를 생성해야 하는데,
일반적으로는 인증된 기관(Certificate Authority) 에 공개키를 전송하여 인증서를 발급받고 있음
Reference Path
'CS' 카테고리의 다른 글
GET과 POST 방식 (0) | 2022.11.13 |
---|---|
대칭키와 비대칭키(공개키) (0) | 2022.11.13 |
TCP vs UDP (0) | 2022.11.06 |
TCP의 3/4 way Handshake (0) | 2022.11.06 |
OSI 7계층 (0) | 2022.11.06 |