HTTP
HTTP란?
HTTP는 HyperText Transfer Protocol의 약어로 인터넷에서 데이터를 주고받을 수 있는 텍스트 기반 통신 프로토콜입니다.
HTTP의 동작
HTTP는 클라이언트/서버 모델을 따릅니다. 클라이언트(Client)에서 사용자가 브라우저의 URL을 통해 서비스를 요청(Request)하면 서버(Server)에서 해당 요청사항에 맞는 결과를 찾아 클라이언트에 응답(Response)하는 형태로 동작을 하게 됩니다. HTML 문서 외에도 JSON, XML 등의 데이터를 주고받을 수 있습니다.
HTTP의 특징
1) JSON, XML 등의 정보를 주고받을 수 있음
초기에는 HTML과 같은 하이퍼미디어 문서를 주고받을 수 있었지만, 최근에는 JSON, XML 등의 다양한 형태의 데이터를 주고받을 수 있습니다.
2022.10.11 - [CS/기초 지식] - JSON과 XML
2) 클라이언트-서버 모델을 따름
클라이언트가 요청을 생성하기 위한 연결을 열고 응답을 받을 때까지 대기하는 클라이언트-서버 모델을 따릅니다.
3) 비연결성(Connectionless) 프로토콜
HTTP는 클라이언트와 서버가 한 번 연결을 한 후 클라이언트 요청에 대해 서버가 응답을 마치면 연결을 끊기 때문에 비연결성 프로토콜이라는 특징을 갖습니다.
4) 무상태성(Stateless) 프로토콜
HTTP는 비연결성 프로토콜이기 때문에 클라이언트와 서버가 이전에 요청한 결과에 대해서 알 수 없습니다. 즉, 클라이언트가 이전 요청과 같은 데이터를 원한다면 다시 서버에 동일한 요청을 해야 합니다. 이런 이유로 HTTP는 무상태성 프로토콜이라는 특징을 갖습니다.
Cookie와 Session을 사용하여 무상태성 프로토콜의 특징을 보완할 수 있습니다. (따로 다루도록 하겠습니다.)
Request Message
Start line
HTTP Request message의 시작 라인으로 총 세 부분으로 구성이 되어있습니다.
1) HTTP method
요청의 종류를 나타내고 Start line에서 맨 앞에 위치합니다.
- GET: 데이터 조회를 요청할 때 사용
- POST: 데이터 생성을 요청할 때 사용
- PUT: 데이터 수정을 요청할 때 사용
- DELETE: 데이터 삭제를 요청할 때 사용
2) Request target
HTTP 요청을 받는 클라이언트의 목표 주소를 나타냅니다.
3) HTTP version
HTTP의 버전을 명시합니다. 버전에 따라 Request message의 구조나 데이터가 다를 수 있습니다.
Headers
해당 요청에 대한 추가 정보를 담고 있는 부분입니다.
- Host: 요청을 받는 서버의 호스트 이름, 포트번호
- User-Agent: 요청을 보내는 클라이언트의 정보(웹 브라우저의 정보 등)
- Accept: 해당 요청이 받을 수 있는 데이터 타입
- Connection: 해당 요청이 끝난 후 클라이언트와 서버의 지속적인 연결 유지 여부(keep-alive 또는 close)
- Content-Type: 해당 요청 메시지의 body 타입
Body
해당 요청이 전송하는 데이터를 담고 있는 부분입니다. 전송하는 데이터가 없으면 body 부분은 비어있습니다.
Response Message
Status line
HTTP Response의 상태를 간략하게 나타내주는 부분입니다.
1) HTTP version
Request message와 동일
2) Status Code
HTTP Response의 상태를 나타내는 코드입니다. 총 세 자리이며 많은 종류의 상태 코드가 있지만, 크게 다섯 분류로 나눌 수 있습니다.
- 1XX(조건부 응답): 요청을 받았으며 작업을 계속함(HTTP 1.0에서 지원되지 않음)
- 2XX(성공): 요청을 성공적으로 받아서 인식했고, 수용함
- 3XX(리다이렉션 완료): 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 함
- 4XX(요청 오류): 요청의 문법이 잘못됐거나 요청을 처리할 수 없음
- 5XX(서버 오류): 서버가 유효한 요청을 명백하게 수행하지 못함
3) Status Text
HTTP Response의 상태를 간략하게 설명해주는 부분입니다.
Headers
Request message의 Headers와 일반적으로 동일하지만, User-Agent 대신 Server 헤더가 사용됩니다.
Body
Request message의 Body와 일반적으로 동일합니다.
HTTPS
HTTPS란?
HTTP는 클라이언트는 클라이언트/서버 모델을 따라 데이터를 주고받는 프로토콜이지만 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이라 쉽게 탈취가 가능합니다. 이런 HTTP의 보안을 위해 나오게 된 것이 바로 HTTPS(HyperText Transfer Protocol Secure)입니다.
HTTP에 SSL을 사용하여 보안을 한 층 업그레이드 한 것입니다.
SSL이란?
SSL은 Secure Sockets Layer의 약어로 인터넷 통신의 개인 정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscape가 1995년 처음으로 개발한 프로토콜입니다. SSL은 실질적으로 2015년 공식적으로 사용이 종료되었고, 현재 사용 중인 TLS(Transport Layer Security)의 전신입니다.
대칭키, 비대칭키 방식을 사용하여 SSL 인증서를 발급받고, SSL 통신을 할 수 있게 되어 HTTP의 보안을 적용할 수 있게 됩니다.
TLS - Netscape가 IETF에 SSL 프로토콜 제어권을 넘기고 1999년 IETF가 새롭게 발표한 프로토콜로 실제로는 TLS 1.0이 SSL 3.1이었음
대칭키, 비대칭키
대칭키 암호화 방식
암복호화에 사용되는 키가 동일한 것을 의미합니다.
키 하나로 암복호화가 가능하기 때문에 속도가 빠르다는 장점이 있습니다. 하지만 키를 교환하는 과정에서 탈취가 될 수 있어 무결성/인증/부인방지를 보장하지 않습니다.
비대칭키(공개키) 암호화 방식
암복호화하는데 두 가지의 키가 사용됩니다.
1) 개인키 - 개인만 가지고 있는 키
2) 공개키 - 모든 사람이 접근할 수 있는 키
공개키를 계좌 번호, 개인키를 계좌 비밀번호로 비유할 수 있습니다. 계좌 번호는 누구에게나 공개되지만, 계좌 비밀번호는 본인만 알고 사용할 수 있기 때문이죠.
이렇듯 공개키로부터 암호화된 데이터는 개인키로만 복호화할 수 있어야 합니다. 따라서 비대칭키 암호화 방식을 사용하면 공개키가 탈취당해도 아무런 문제가 없게 되는 것입니다.
비대칭키 암호화 방식은 기밀성/인증/부인방지 기능을 제공하지만, 과정이 복잡하여 속도가 느리다는 단점이 있습니다.
SSL 발급 과정
SSL 통신 과정을 이해하기 위해서는 CA 개념 이해가 필요합니다. CA는 Certificate Authority의 약어로 SSL 인증서를 발급해주는 공식 기관입니다.
1. 사용자에게 정보를 제공해주는 웹 사이트는 웹 사이트의 각종 정보 및 공개키를 CA에 전송
2. CA는 웹 사이트의 각종 정보 및 공개키를 받아 검증을 한 후 CA의 개인키로 서명을 진행하여 SSL 인증서를 생성해 웹 사이트로 전송
3. CA는 CA의 공개키를 사용자의 웹 브라우저에 전송하고, 웹 브라우저는 이를 브라우저 내부에 저장
SSL 통신 과정
1. 사용자가 웹 사이트에 접속 요청을 보내면 웹 사이트는 자신이 신뢰할 수 있는 사이트라는 것을 사용자에게 증명하기 위해 CA로부터 발급받은 사이트 인증서를 전송
2. 사이트 인증서는 CA의 개인키로 서명되었기 때문에 사용자는 브라우저 내부에 있는 CA로부터 전달받은 공개키로 사이트 인증서를 복호화
3. 사이트 인증서를 성공적으로 복호화했다면 사이트의 공개키로 자신의 대칭키를 암호화하고 웹 사이트에 전송
4. 웹 사이트는 자신의 개인키로 복호화를 진행하여 사용자의 대칭키를 얻음
5. 이후 사용자와 웹 사이트는 대칭키를 공유하고 있으므로 암호화하여 데이터를 요청 및 응답
즉, 비대칭키 암호화 방식을 이용해 handshake 과정을 진행하고, 이후 데이터는 대칭키 암호화 방식을 이용해 송수신!
참고 자료
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 라우팅(Routing) (0) | 2022.11.09 |
---|---|
[네트워크] TCP와 UDP (0) | 2022.11.07 |
[네트워크] OSI 7계층, TCP/IP 4계층 (0) | 2022.10.21 |
[네트워크] 네트워크 토폴로지(Network Topology) (0) | 2022.10.19 |