HTTP
HTTP 란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.
- 암호화되지않은 평문 데이터를 전송하는 프토토콜이어서 보안상 문제가 있다.
- 80번 포트로 통신 한다.
TCP/IP: 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져있다.
HTTPS
HTTP에 데이터 암호화가 추가된 프로토콜이다.
암호화 방식
대칭키 암호화
클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함. 키가 노출되면 매우 위험하지만 연산 속도가 빠르다.
비대칭키 암호화
1개의 쌍으로 구성된 공개키 - 개인키를 암호화/복호화 하는데 사용함. 키가 노출되어도 비교적 안전하지만, 연산 속도가 느리다.
- 공개키: 모두에게 공개하는 키
- 공개키로 암호화를 하면 개인키로만 복호화할 수 있다.
- 개인키는 나만 가지고 있으므로 나만 볼 수 있다.
- 개인키: 나만 가지고 알고 있어야 하는 키
- 개인키로 암호화를 하면 공개키로만 복호화할 수 있다.
- 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.
HTTPS 동작 과정
Hand-Shaking 과정을 통해서 서버와 클라이언트간 세션키를 교환하여, 신뢰성을 확보한다.
- 클라이언트가 서버로 최초 연결 시도
- 서버는 인증서를 클라이언트에게 넘김
- 클라이언트는 인증서의 유효성을 검사하고, 세션키를 발급
- 클라이언트는 세션키를 보관하며 서버의 인증서로 세션키를 암호화하여 서버로 전송
- 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
- 클라이언트와 서버는 동일한 세션키를 공유, 데이터를 전달할 때 세션키로 암호화/복호화를 진행
Hand Shaking 흐름
Hand Shaking 과정
Reference
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
https://stackoverflow.com/questions/188266/how-are-ssl-certificates-verified#:~:text=Your web browser downloads the,key of the web server.&text=It uses this public key,address of the web server