Goal
- HTTP 동작과정을 알아본다
- HTTPS의 동작과정을 알아본다
HTTP : HyperText Transfer Protocol
웹 상에서 클라이언트와 서버 간에 정보를 주고 받을 수 있는 프로토콜(웹 통신 규약)
Point
- 웹브라우저에서 URL 입력
- 웹서버의 IP주소를 해석
- TCP 커넥션 확립
- HTTP 리퀘스트 전송과 HTTP 리스폰스 전송
- 서버 클라이언트 간 연결 종료
- 웹 브라우저가 웹 문서 출력
세부 동작 과정
- 웹브라우저에서 URL 입력
- 웹브라우저에 URL을 입력하거나 웹페이지 링크 클릭
- 웹서버의 IP주소를 해석
- URL에 포함된 웹서버의 호스트명을 DNS서버에 질의해 웹서버의 IP주소를 해석
- DNS서버에 질의시, ARP가 라우터(이더넷)의 MAC주소를 조사
- 라우터에서 다시 DNS로 목적지 IP질의
- TCP 커넥션 확립
- 웹서버의 IP주소를 알면, 그 주소를 지정하여 웹브라우저와 웹서버 어플리케이션간의 TCP 커넥션
- 3 way-handshaking
- HTTP 리퀘스트 전송(클라이언트 ->서버 요청)과 HTTP 리스폰스 전송(서버 -> 클라이언트 응답)
- 브라우저에서 지정한 URL을 포함한 HTTP 리퀘스트가 웹 어플리케이션에 전송
- HTTP 리퀘스트를 받은 웹서버 어플리케이션은 요청된 웹페이지 파일을 HTTP 리스폰스로 반환
- 서버 클라이언트 간 연결 종료
- 4 way-handshaking
- 웹 브라우저 웹 문서 출력
- HTML로 변환
URL : 웹 사이트 주소
- URL 형식 - <스킴>://<호스트명>/<경로명>
- URL 예시 - http://www.tistory.com/manage/newpost/index.html
- URL은 전송받고 싶은 웹서버와 그 파일을 나타냄
HTTP 리퀘스트
- HTTP 리퀘스트 형식
- 리퀘스트 라인
- 메세지 헤더
- 공백라인
- 엔티티 바디
- 주요 메소드
- GET, HAED, POST, PUT, DELETE, CONNECT
- 웹 브라우저와 웹 서버 어플리케이션은 HTTP를 이용해 웹페이지 파일을 전송한다
- HTTP 통신 전에 웹브라우저와 웹서버 어플리케이션은 TCP 통신을 맺는다
- HTTP 리퀘스트로 웹브라우저에서 웹서버 어플리케이션은 파일 전송을 요청한다
HTTP 리스폰스
- HTTP 리스폰스 형식
- 리퀘스트 라인
- 메세지 헤더
- 공백라인
- 엔티티 바디
- 주요 HTTP 상태 코드
- 1xx - 정보. 추가 정보가 있음을 전달
- 2xx - 성공. 서버가 요청 처리했음을 전달
- 3xx - 리다이렉트. 다른 URI로 다시 리퀘스트하도록 요청
- 4xx - 클라이언트 에러. 요청에 문제가 있어 처리할 수 없음을 전달
- 5xx - 서버 에러. 서버 쪽에 문제가 있어 처리할 수 없음을 전달
- HTTP 리퀘스트에 대해 HTTP 리스폰스로 응답
- HTTP 리스폰스에는 전송해야하는 파일이 포함된다
- 파일 크기가 크면 TCP에 의해 분할됨
HTTPS : HyperText Transfer Protocol over Secure Socket Layer
HTTP에 보안적 약점을 보완한 프로토콜 또는 HTTP over TLS, HTTP over SSL, HTTP Secure
Point
- 공개키 암호화 방식과 대칭키 암호화 방식의 장점을 활용해 하이브리드 사용
- 데이터를 대칭키 방식으로 암복호화하고, 공개키 방식으로 대칭키 전달
세부 동작 과정
- 클라이언트가 서버 접속하여 Handshaking 과정에서 서로 탐색
- client hello
- 클라이언트가 서버에게 전송할 데이터
- 클라이언트 측에서 생성한 랜덤 데이터
- 클 - 서 암호화 방식 통일을 위해 클라이언트가 사용할 수 있는 암호화 방식
- 이전에 이미 handshaking 기록이 있다면 자원 절약을 위해 기존 세션을 재활용하기 위한 세션 아이디
- 클라이언트가 서버에게 전송할 데이터
- server hello
- client hello에 대한 응답으로 전송할 데이터
- 서버 측에서 생성한 랜덤 데이터
- 서버가 선택한 클라이언트 암호화 방식
- ssl 인증서
- client hello에 대한 응답으로 전송할 데이터
- client 인증 확인
- 서버로 부터 받은 인증서가 ca에 의해 발급되었는지 본인이 가지고 있는 목록에서 확인하고, 목록에 있다면 ca 공개키로 인증서 복호화
- 클-서 각각의 랜덤 데이터를 조합하여 pre master secret 값 생성(데이터 송수신 시 대칭키 암호화에 사용할 키)
- pre master secret 값을 공개키 방식으로 서버 전달(공개키는 서버로부터 받은 인증서에 포함)
- 일련의 과정을 거쳐 session key 생성
- server 인증 확인
- 서버는 비공개키로 복호화하여 pre master secret 값 취득(대칭키 공유 완료)
- 일련의 과정을 거쳐 session key 생성
- handshaking 종료
- client hello
- 데이터 전송
- 서버와 클라이언트는 session key를 활용해 데이터를 암복호화하여 데이터 송수신
- 연결 종료 및 session key폐기
참고
'네트워크' 카테고리의 다른 글
[네트워크] HTTP 특성을 보완한 쿠키와 세션 (1) | 2023.10.31 |
---|---|
[네트워크] HTTP 상태코드 (2xx - 성공, 3xx - 리다이렉션, 4xx - 클라이언트 오류, 5xx - 서버 오류) (0) | 2023.09.17 |
[네트워크] TCP의 3 way handshake와 4 way handshake (0) | 2023.06.06 |