HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.
→ 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜, 기본 포트: 80
HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 등으로 불리며 암호화를 지원하고 있다.
→ HTTP에 데이터 암호화가 추가된 프로토콜, 기본포트 443
클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
키가 노출되면 매우 위험하지만 연산 속도가 빠름
암호화: 평문 → 개인키 → 암호문
복호화: 암호문 → 비밀키 → 평문
1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
키가 노출되어도 비교적 안전하지만 연산 속도가 느림
암호화: 평문 → 개인키 → 암호화 → 공개키 → 평문
복호화: 평문 → 공개키 → 암호화 → 개인키 → 평문
서버가 해당 서버(웹)로 요청(request)한 클라이언트(사용자)를 식별하는 방법이다. 서버는 요청한 클라이언트 에게 요청 헤더의 set-cookie 값으로 클라이언트 식별자인 session-id를 응답한다.
서버로부터 응답받은 session-id는 해당 서버와 클라이언트 메모리에 저장된다. 이때 클라이언트 메모리에 사용되는 cookie 타입은 세션 종료 시 같이 소멸되는 Memory cookie가 사용된다.
HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 얻고 있다.
HTTPS 연결 과정(Hand-Shaking)에서는 먼저 서버와 클라이언트 간에 세션키를 교환한다. 여기서 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어진다.
문제는 이 세션키를 클라이언트와 서버가 어떻게 교환할 것이냐 인데, 이 과정에서 비대칭키가 사용된다.
즉, 처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되는 것이고, 이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것이다.