본문 바로가기

카테고리 없음

[네트워크] HTTP/HTTPS

728x90

HTTP (Hyper Text Transfer Protocol)

  • 웹 서버와 클라이언트 간의 문서를 교환하기 위한 통신 규약
  • 신뢰성 있는 데이터 보장 → TCP/IP 기반 응용 프로토콜
  • 연결 상태 유지 X → 비연결성
  • 요청/응답(Request, Response) 방식으로 동작

특징

  • TCP 기반의 통신 방식
    • TCP (Transmission Control Protocol)
      1. 서버의 url에서 호스트명을 추출하여 ip로 변환 및 포트 번호 추출
      2. TCP connection
      3. 요청 및 응답
      4. 브라우저에 전달
  • 비연결 지향
    • Stateless
    • 브라우저를 통해 클라이언트의 요청으로 서버와 접속하여 해당 요청에 대한 응답을 클라이언트에게 전송한 후 연결을 종료 → 사용자 구분이 되지 않음 → 이후 쿠키, 세션 등이 등장하여 해결
    • 자원이 적게 드는 장점
  • 단방향성
    • 클라이언트 요청에 대해 응답하는 방식이기 때문에 서버가 먼저 응답하지 않음

문제점

  • HTTP는 평문 통신 → 언제든지 훔쳐볼 수 있음
  • 통신 상대를 확인하지 않기에 위장 가능
  • 완전성을 증명할 수 없기에 변조가 가능

HTTPS (Hyper Text Transfer Protocol Secure)

  • HTTP 통신하는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)라는 프로토콜로 대체 → 전송계층 과 응용계층 사이
  • HTTP는 TCP와 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다.
  • 즉, 하나의 레이어를 더 둔 것이다.
  • HTTPS의 SSL에서는 대칭키 암호화 방식과 공개키 암호화 방식을 모두 사용

SSL (Secure Socket Layer)

  • 사용자가 사이트에 제공하는 정보를 암호화
  • CA(Certificate Authority)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용
  1. 먼저 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해서 공개키와 개인키를 만든다.
  2. 그 다음에 신뢰할 수 있는 CA 기업을 선택하고 그 기업에 내 공개키를 관리해달라고 계약한다
  3. 계약을 완료한 CA 기업은 또 CA 기업만의 공개키와 개인키가 있다.
  4. CA 기업은 CA기업의 이름과 A서버의 공개키, 공개키의 암호화 방법 등의 정보를 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공한다.
  5. A서버는 암호화된 인증서를 갖게 되었다. 이제 A서버는 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청(Request)이 오면 이 암호화된 인증서를 클라이언트에게 준다.
  6. 이제 클라이언트 입장에서, 예를 들어 A서버로 index.html 파일을 달라고 요청했다. 그러면 HTTPS 요청이 아니기 때문에 A서버의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게된다.
  7. 여기서 중요하다. 세계적으로 신뢰할 수 있는 CA 기업의 공개키는 브라우저가 이미 알고 있다!
  8. 브라우저가 CA 기업 리스트를 쭉 탐색하면서 인증서에 적혀있는 CA기업 이름이 같으면 해당 CA기업의 공개키를 이미 알고 있는 브라우저는 해독할 수 있다. 그러면 해독해서 A서버의 공개키를 얻었다.
  9. 그러면 A서버와 통신할 때는 A서버의 공개키로 암호화해서 Request를 날리게 된다.
  10. 출처: https://jeong-pro.tistory.com/89 [기본기를 쌓는 정아마추어 코딩블로그]
  • 간단 설명
  • 클라이언트와 서버의 통신 흐름 과정*
    1. 클라이언트가 SSL로 암호화된 페이지를 요청한다.
    2. 서버는 클라이언트에게 인증서를 전송한다.
    3. 클라이언트는 인증서가 신용이 있는 CA로부터 서명된 것인지 판단한다. 브라우저는 CA 리스트와 해당 CA의 공개키를 가지고 있다. 공개키를 활용하여 인증서가 복호화가 가능하다면 접속한 사이트가 CA에 의해 검토되었다는 것을 의미한다. 따라서 서버가 신용이 있다고 판단한다. 공개키가 데이터를 제공한 사람의 신원을 보장해주는 것으로 이러한 것을 전자 서명 이라고 한다.
    4. 클라이언트는 CA의 공개키를 이용해 인증서를 복호화하고 서버의 공개키를 획득한다.
    5. 클라이언트는 서버의 공개키를 사용해 랜덤 대칭 암호화키, 데이터 등을 암호화하여 서버로 전송한다.
    6. 서버는 자신의 개인키를 이용해 복호화하고 랜덤 대칭 암호화키, 데이터 등을 획득한다.
    7. 서버는 랜덤 대칭 암호화키로 클라이언트 요청에 대한 응답을 암호화하여 전송한다.
    8. 클라이언트는 랜덤 대칭 암호화키를 이용해 복호화하고 데이터를 이용한다.
728x90