서버/클라이언트 모델을 따라 데이터를 주고 받고자 하는 '프로토콜'이다.
HTTP는 인터넷에서 '하이퍼텍스트'를 교환하고자 하는 목적이며
- 서버가 80번 포트에서 요청을 기다리고 있고 클라이언트가 80번 포트로 요청을 보낸다.
비밀번호 or 주민등록번호 등을 주고 받을 경우 제 3자가 정보를 조회하거나 중간에 패킷을 가로채거나 수정할 수 있었다......🤦♂️
이런 위험을 방지하고자 HTTPS가 등장했으니...
✔ 공개키 : 모두에게 공개 가능한 키
✔ 개인키 : 나만 알아야 하는 키
공개키로 암호화를 하면 개인키로만 복호화 할 수 있다.
-> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.
개인키로 암호화하면 공개키로만 복호화 할 수 있다.
-> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장.
클라이언트는 TCP 3way handshake를 수행한 이후 Client Hello를 전송합니다.
클라이언트(브라우저)가 서버로 최초 연결 시도를 함
서버는 공개키(인증기관의 개인키로 암호화 된 인증서)를 클라이언트에게 넘겨줌
클라이언트는 인증서의 유효성을 검사(인증기관의 공개키로 검증)하여 '세션키'를 발급함.
클라이언트는 세션키를 보관하며 동시에 '서버의 공개키'로 이 세션키를 암호화하여 서버로 보냄
서버는 '서버의 개인키'를 통해 암호화된 이 세션키를 복호화 한다.
=> (세션키 획득)
이제 클라이언트와 서버는 동일한 세션키를 공유
=> 데이터를 전달할 때 세션키(이 공유된 비밀키를 통해)로 암호화/복호화를 진행할 수 있다.