HTTP(Hyper Text Transfer Protocol)
서버-클라이언트 모델을 따라 데이터를 주고받기 위한 프로토콜
- 초기에는
HTML 파일
을 전송하는 목적, 현재는JSON
,Image
파일 등 또한 전송 - HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신규약으로
80번 포트
사용- 클라이언트는 80번 포트로 요청 보냄
- HTTP서버가 80포트에서 요청 기다림
단방향 통신
: 클라이언트의 요청이 있을때만 서버가 응답
HTTP 구조
- 애플리케이션 레벨의 프로토콜
- TCP/IP위에서 작동
- 상태를 가지고있지 않은 Stateless 프로토콜
- Method, Path, Version, Headers, Body 등으로 구성
HTTP 문제점
암호화되지 않은 평문데이터
를 전송하는 프로토콜
-> 제 3자가 정보조회 가능
=> HTTPS 등장
HTTPS(Hyper Text Transfer Protocol Secure)
HTTP에 데이터암호화 추가
된 프로토콜
443 포트
사용
대칭키 암호화
- 클라이언트가 서버와
동일한 키
를 사용해암호화/복호화
진행 - 연산속도가 빠름
- 키가 노출되면 매우 위험
비대칭키 암호화
- 1개의 쌍으로 구성된
공개키 & 개인키
사용해 암호화/복호화 진행- 공개키 : 모두에게 공개가능한 키
- 공개키 암호화 (개인키로만 복호화) : 나만 볼 수 있음
- 개인키 : 나만 가지고 알고 있어야하는 키
- 개인키 암호화 (공개키로만 복호화) : 내가 인증한 정보임을 알려 신뢰성 보장 가능
- 공개키 : 모두에게 공개가능한 키
- 연산속도 느림
- 키가 노출되어도 비교적 안전
HTTPS 동작과정
대칭키 암호화
와 비대칭키 암호화
모두 사용 -> 빠른속도 + 안정성
HTTPS 연결과정(Hand-Shaking)에서 서버-클라이언트 간에 세션키 교환
세션키를 공유
하는 과정에서비대칭키
사용- 세션키 : 주고받는 데이터를 암호화 하기위해 사용되는 대칭키
데이터간의 교환
에는 빠른 연산속도 필요해서대칭키
사용
- 클라이언트(브라우저)가 서버로 최초 연결시도
서버
: 클라이언트 에게공개키(인증서)
넘겨줌 (아래에서 자세하게 보기)클라이언트
: 인증서의 유효성 검사 ->세션키 발급
-> 세션키 보관 +서버의 공개키로
세션키를 암호화하여 서버로 전송서버
: 암호화된세션키 복호화
(개인키로) -> 세션키 얻음
=> 클라이언트 & 서버 동일한 세션키 공유 - 데이터 전달할 때세션키로 암호화/복호화
진행
HTTPS 발급과정(서버가 비대칭키 발급받는 과정)
HTTPS 적용하기 위해 공개키/개인키 발급
인증된 기관에 공개키 전송하여 인증서 발급받음
서버
: 공개키 보냄인증된기관
: 인증서(서버의 공개키, 서버정보)를 인증기관의 개인키로 암호화한 인증서를 서버에 줌- 인증서는 서버의 공개키가 포함되어 있음 = 서버의 공개키라고 봐도 무방
클라이언트
: 인증기관의 공개키(이미 다운받아있음)로 인증서 복호화 해서 서버의 공개키 얻음
- 인증서는 인증기관의 개인키로 암호화되어있어 신뢰성확보
- 클라이언트는 서버의 공개키로 데이터 암호화 했기 때문에 서버만 복호화해서 원본의 데이터 얻을 수 있음
Reference
https://jeong-pro.tistory.com/89
https://mangkyu.tistory.com/98
https://tiptopsecurity.com/how-does-https-work-rsa-encryption-explained/