[Network] HTTP와 HTTPS

HTTP

HTTP는 웹서버와 클라이언트 간의 통신 규약이며 TCP 기반의 통신방식을 사용합니다.. 비연결을 지향하기 때문에 어떤 사용자의 요청인지 알기 힘들다는 단점이 있습니다. 때문에 여러 사용자가 요청할 시 제대로된 응답 데이터를 전송하기 힘들 수 있습니다. 쿠키, 세션, 히든 폼 필드 등으로 해결할 수 있습니다.

또한 평문 통신이기 때문에 도청이 가능합니다. 통신 상대를 확인하지 않기 때문에 위장이 가능합니다. 이러한 문제들을 극복하기 위해 HTTPS가 등장합니다.

HTTPS

HTTP 통신의 소켓 부분을 SSL 프로토콜로 대체한 것을 말합니다. HTTP에서 TCP와 통신하는 것과 달리 SSL을 중간에 거칩니다. 대칭키 암호화 방식과 공개키 암호화 방식을 모두 사용하게 됩니다.

SSL

  1. 서버를 운영하는 기업은 HTTPS 적용을 위해 공개키와 개인키를 만듭니다.
  2. 신뢰할 수 있는 CA 기업을 선택하고 인증서 생성을 요청합니다.
  3. 서버의 공개키, 암호화 방법 등의 정보를 담은 인증서를 만들고 CA의 개인키로 암호화하여 서버에 제공합니다.
  4. 클라이언트가 SSL로 암호화된 페이지를 요청시 서버는 인증서를 전송합니다.

클라이언트 - 서버 통신과정

암호화된 페이지를 요청받으면 인증서를 클라이언트에게 전송합니다. 클라이언트는 공개키를 활용해 복호화하여 CA 서명이 있는지 판단하고 전자서명으로 신원을 보장합니다. 복호화한 인증서로 획득한 서버의 공개키를 사용해 대칭 암호화키와 데이터를 암호화해 서버로 전송합니다. 서버는 개인키를 이용해 복호화하며 대칭암호화키로 응답을 암호화해 전송합니다. 클라이언트는 대칭 암호화키로 데이터를 복호화해 사용합니다.

References


Written by@Cha-Ji
Android developer

InstagramGitHub