HTTP
- 웹 서버와 클라이언트 간 문서를 교환하기 위한 통신 규약
- 웹에서만 사용하는 프로토콜로 TCP/IP 기반으로 서버와 클라이언트 간 요청과 응답을 전송한다. 웹 브라우저와 웹 서버의 통신에는 IP가 필요하고 TCP를 기반으로 하는 통신이기에 TCP/IP 통신이라고 말한다.
특징
- TCP 기반의 통신 방식
- 비연결 지향
- 브라우저를 통해 사용자의 요청으로 서버와 접속하여 요청에 대한 응답의 데이터를 전송 후 연결을 종료한다.
- 간단하기에 자원이 적게드는 장점이 있다.
- 연결이 지속적이지 않기에 사용자와 연결 종료 후 추가적인 요청시 어떤 사용자의 요청인지 모른다는 점이 있다.
- 여러 사용자가 요청 시 각각의 사용자 요청을 구분할 수 없어서 제대로 된 응답 데이터를 전송할 수 없다.(단점)
- 해결 방법으로는 쿠키,세션, 히든 폼 필드가 있다.
- 단방향성
- 사용자의 요청 한 개에 대해 한 개의 응답을 하는 방식이기에 서버가 먼저 응답하진 않는다.
HTTP 문제점
- HTTP는 평문 통신이기에 도청이 가능하다.
- 통신 상대를 확인하지 않기에 위장이 가능하다.
- 완전성을 증명할 수 없어 변조가 가능하다.
이러한 문제들로 등장한게 HTTPS이다.
HTTPS
- HTTP 통신하는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL라는 프로토콜로 대체한다.
- HTTP는 TCP와 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다.
- 하나의 레이어를 더 둔 느낌이다.
- HTTPS의 SSL에서는 대칭키 암호화 방식과 공기키 암호화 방식을 모두 사용한다.
- SSL 프로토콜을 기반으로 돌아가는 프로토콜 중 하나이다.
SSL
- SSL 프로토콜은 Netscape 사에서 웹서버와 브라우저 사이의 보안을 위해 만들어졌다.
- CA(Certificate Authority)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다.
- CA = 공개키 저장소라고 생각하면 된다.
애플리케이션 서버를 운영하는 기업은 CA를 통해 인증서를 만든다.
- 애플리케이션 서버를 운영하는 기업은 HTTPS 적용을 위해 공개키, 개인키를 만든다.
- 신뢰할 수 있는 CA 기업을 선택하고 인증서 생성을 요청한다.
- CA는 서버의 공개키, 암호화 방법 등의 정보를 담은 인증서를 만들고 해당 CA의 개인키로 암호화하여 서버에 제공한다.
- 클라이언트가 SSL로 암호화된 페이지(https://)를 요청시 서버는 인증서를 전송한다.
클라이언트와 서버의 통신 흐름
- 클라이언트가 SSL로 암호화된 페이지를 요청한다.(브라우저 접속)
- 서버는 클라이언트에게 인증서를 전송한다.
- 클라이언트는 인증서가 신용이 있는 CA로부터 서명된 것인지 판단한다. 브라우저는 CA리스트와 해당 CA의 공개키를 가지고 있다. 공개키를 활용하여 인증서가 복호화가 가능하다면 접속한 사이트가 CA에 의해 검토되었다는 것을 의미한다. 따라서 서버가 신용이 있다고 판단한다. 공개키가 데이터를 제공한 사람의 신원을 보장해주는 것으로 이러한 것을 진짜 서명이라고 한다.
- 클라이언트는 CA의 공개키를 이용해 인증서를 복호화하고 서버의 공개키를 획득한다.
- 클라이언트는 서버의 공개키를 사용해 랜덤 대칭 암호화키, 데이터 등을 암호화하여 서버로 전송한다.
- 서버는 자신의 개인키를 이용하여 복호화하고 랜덤 대칭 암호화키, 데이터 등을 획득한다.
- 서버는 랜덤 대칭 암호화키로 클라이언트 요청에 대한 응답을 암호화하여 전송한다.
- 클라이언트는 랜덤 대칭 암호화키를 이용해 복호화하고 데이터를 이용한다.
인증서에 포함된 내용
- 서버측의 공개키
- 공개키 암호화 방법
- 인증서를 사용한 웹서버의 URL
- 인증서를 발행한 기관의 이름
모든 웹페이지를 HTTPS로 하지 않는다.
평문 통신에 비해 암호화 통신은 CPU나 메모리 등 리소스를 많이 필요로 하기 때문이다. 통신할 때마다 암호화하면 리소스를 소비하기에 서버 한대당 처리할 수 있는 Request 수가 줄어들게 된다.
따라서 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용해야 한다.