Search

HTTP/HTTPS

HTTP (Hyper Text Transfer Protocol)

인터넷에서 html 같은 리소스를 가져올 때 사용되는, 서버와 클라이언트 간 통신 규약
동작 과정
1.
사용자가 브라우저 주소창에 URI(www.naver.com)를 입력
2.
OS는 DNS서버를 조회하여, 도메인명에 해당하는 IP주소 파악
3.
웹 서버와 TCP 연결 시도
TCP 3-way Handshake
클라이언트-서버 간 신뢰성 있는 연결을 위한 3번의 패킷 교환 과정
4.
서버에게 요청 메시지 전송
요청 메시지 형식
요청문
요청메소드 URL HTTP버전
GET /index.html HTTP/1.1
메시지 헤더
호스트네임, 브라우저 정보, 압축 정보, 인증 정보 등 부가정보 저장
메시비 바디
실제 전송될 데이터 저장 GET 요청일 경우 Body 없음
5.
서버는 클라이언트에게 응답 메시지 전송
웹 문서를 클라이언트에게 회신
응답 메시지 형식
상태문
HTTP버전 상태코드 상태이름
HTTP/1.1 200 OK
메시지 헤더
호스트네임, 브라우저 정보, 압축 정보, 인증 정보 등 부가정보 저장
Date: Thu, 12 Feb 2009 06:29:38 GMT              Server: Apache/1.3.29 (Unix) PHP/4.3.4RC3  X-Powered-By: PHP/4.3.4RC3  Transfer-Encoding: chunked  Content-Type: text/html
메시지 바디
실제 전송될 데이터 저장
<HTML> … </HTML>
6.
클라이언트-서버 간 연결 해제
4-way Handshake
클라이언트와 서버가 서로에게 연결 종료하기 위한 4번의 패킷 교환과정
단점
통신 시, 평문을 교환하므로 도청될 경우, 정보가 노출됨
통신 상대를 확인하지 않지 않음
발생할 수 있는 문제
메시지의 완전성을 증명하지 않기 때문에 조작된 메시지를 수신할 수 있음
단점 해결 방안
HTTP에 SSL 프로토콜을 접목

SSL (Secure Socket Layer)

공개키방식과 대칭키방식을 이용한 암호화로 인터넷 연결을 보호하는 표준 기술
SSL Handshake
서버와 클라이언트가 서로 신분을 확인하고, 필요한 정보(통신에 사용될 대칭키 등)을 교환
과정
1.
파란 화살표
TCP Handshake 과정
2.
CLIENT HELLO
클라이언트는 암호 알고리즘과 압축방식 등 정보가 담긴 Clinet Hello 메시지를 서버에게 전송
3.
SERVER HELLO
서버는 Client Hello의 응답으로, 세션 ID와 서버 공개키 인증서가 담긴 Server Hello 메시지를 전송
4.
PRE MASTER SECRET
클라이언트는 서버 공개키 인증서로부터 서버의 공개키를 획득
이 키를 이용하여 난수를 암호화하여 예비 마스터 암호를 서버에게 전송
5.
SESSION KEY CREATION
서버는 예비 마스터 암호를 자신의 개인키로 복호화하여, 난수를 획득
이 난수를 획득함으로써, 서버와 클라이언트는 마스터키를 완성
마스터 키를 이용하여 세션키를 생성
6.
CLIENT FINISHED
클라이언트는 지금까지 교환한 내역을 해시 후 세션키로 암호화하여 FINISHED 메시지를 서버에게 전송
7.
SERVER FINISHED
서버도 교환 내역을 해시하고, 그 결과와 클라이언트에게 받은 FINISHED가 일치한지 비교
일치할 경우, 해당 세션키를 대칭키로 사용
8.
EXCHANGE MESSAGES
세션키를 이용하여 메시지를 대칭키 방식으로 암호화한 후, 통신

HTTPS (Hyper Text Transfer Protocol Secure)

HTTP에 SSL프로토콜을 사용하여 보안기능이 추가된 형태
1.
HTTP 프로토콜을 통해 메시지 생성
2.
SSL 프로토콜을 통해 상대방 인증 후 메시지 암호화
3.
TCP 프로토콜을 통해 신뢰성있는 전송을 보장
수신자가 존재하는지 파악
메시지 흐름제어, 혼잡제어 등
메시지 순차 전송
4.
IP 프로토콜을 통해 통신 경로를 파악하여 전송
HTTP 단점 해결
대칭키로 암호화함으로써, 도청되어 정보가 노출되는 것을 방지
인증서(공개키)로 상대를 확인함으로써, 위장 공격 방지
메시지 다이제스트를 통해, 완정성 증명
메시지 다이제스트(Message Digest)
데이터에서 일정 길이의 요약을 보고, 이 요약된 값이 예상 값과 같은지 확인
예상값과 같다면, 해당 메시지는 조작되지 않았음을 보장

HTTP 상태코드

API 응답 상태를 코드를 통해 파악
API문서 작성 시 꼭 필요한 정보
200번대
200 (OK) : 조회 요청 성공
201 (Create) : 생성 요청 성공
204 (No Content) : 리소스 삭제 요청 성공
300번대
301 (Move Permanently)
요청 URI가 새로운 위치로 옮겨감
400번대
클라이언트 오류
400 (Bad Request)
정의되지 않은 요청이 들어옴
ex. URI 문법이 잘못됨
401 (Unauthorized)
인증 오류
비로그인된 상태에서 허가되지 않은 접근
403 (Forbidden)
인증은 되었으나, 해당 자원에 대한 권한이 없음
비로그인/로그인된 상태에서 허가되지 않은 접근
404 (Not Found)
요청 URI에 대한 리소스가 존재하지 않음
URI가 없음
500번대
서버 오류
500 (Internal Server Error)
서버 내부 오류
502 (Bad Gateway)
게이트웨이로 작업하는 동안 오류 발생
ex. 너무 많은 트래픽이 몰리는 경우