[CS] HTTP와 HTTPS

이준기·2022년 7월 28일
0

HTTP

HTTP 란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.

애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.

  • 암호화되지않은 평문 데이터를 전송하는 프토토콜이어서 보안상 문제가 있다.
  • 80번 포트로 통신 한다.

TCP/IP: 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져있다.

HTTPS

HTTP에 데이터 암호화가 추가된 프로토콜이다.

  • 443 포트로 통신 한다.

암호화 방식

대칭키 암호화

클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함. 키가 노출되면 매우 위험하지만 연산 속도가 빠르다.

비대칭키 암호화

1개의 쌍으로 구성된 공개키 - 개인키를 암호화/복호화 하는데 사용함. 키가 노출되어도 비교적 안전하지만, 연산 속도가 느리다.

  • 공개키: 모두에게 공개하는 키
    • 공개키로 암호화를 하면 개인키로만 복호화할 수 있다.
    • 개인키는 나만 가지고 있으므로 나만 볼 수 있다.
  • 개인키: 나만 가지고 알고 있어야 하는 키
    • 개인키로 암호화를 하면 공개키로만 복호화할 수 있다.
    • 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.

HTTPS 동작 과정

Hand-Shaking 과정을 통해서 서버와 클라이언트간 세션키를 교환하여, 신뢰성을 확보한다.

  1. 클라이언트가 서버로 최초 연결 시도
  2. 서버는 인증서를 클라이언트에게 넘김
  3. 클라이언트는 인증서의 유효성을 검사하고, 세션키를 발급
  4. 클라이언트는 세션키를 보관하며 서버의 인증서로 세션키를 암호화하여 서버로 전송
  5. 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
  6. 클라이언트와 서버는 동일한 세션키를 공유, 데이터를 전달할 때 세션키로 암호화/복호화를 진행

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

profile
Hongik CE

0개의 댓글