HTTP 와 HTTPS

고먐미·2023년 2월 27일
0

먼저 알아두면 좋아요!

  • IP 주소 (Internet Protocol Address)

IP 주소란 인터넷에 연결되어 있는 모든 장치(컴퓨터, 서버장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소

즉, 인터넷에 연결된 모든 컴퓨터는 IP를 갖게된다.

( 보편적으로 사용되는 IP 버전은 4입니다.)
(IPv4가 확장성과 용량 면에서 한계를 보여 IPv6로 대체될 것으로 보임)

  • 도메인 네임 시스템 (DNS, Domain Name System)

도메인 네임은 IP 주소를 사람들이 이해하기 쉽게 문자로 표현한 것이다.
하지만 컴퓨터는 IP 주소로 서로의 위치를 확인하고, 통신하고, 도메인 네임은 식별할 수 없기 때문에, IP 주소에 도네임 네임을 할당하고 이를 관리하는 시스템을 DNS라고 한다.

도메인은 웹페이지 URL에 포함된다.

  • 포트 (Port)

직역하면 항구라는 뜻으로, 컴퓨터 관련 분야에서의 의미로는 운영 체제 통신에서의 종단점을 뜻한다.

IP Adress를 통해 목적지 호스트까지 도달한 후에 어떤 프로세스에서 데이터를 받을 것인지를 알아야 하는데 이 때 쓰이는 것이 포트번호다.

  • TCP/IP

IP + TCP = 인터넷 프로토콜 + 전송 제어 프로토콜 이다.
TCP를 기반으로 한(신뢰성 통신을 하는) HTTP,FTP,SMTP 등 수 많은 프로토콜들이 IP 위에서 동작하기에 묶어서 TCP/IP라고 한다.
결국에는 효율적으로 빠르게(IP) 보내면서 안전하게(TCP) 전달해주려는 목적


HTTP란?

  • 정의 : 클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜 (규약,약속)
  • 특징
    • 단방향성 : 서버가 먼저 응답을 보낼 수 없고, 클라이언트가 요청을 보내야만 응답할 수 있다.
    • 비연결성 : 클라이언트의 요청으로 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결을 종료한다.
    • 따라서, 실시간 통신을 할 수 없다.
  • 문제점
    • HTTP는 평문 통신이기 때문에 도청이 가능하다.
    • 통신 상대가 검증된 상대인지 확인하지 않기 때문에 위장이 가능하다.
    • 완전성을 증명할 수 없기 때문에 변조가 가능하다.

잠깐! 채팅같은 실시간 통신이 필요한 서비스는 어떤걸 사용해서 통신하나요?

보통 웹소켓(WebSocket)을 사용한다.
웹소켓은 TCP 기반의 통신 프로토콜이며, 데이터 전송이 끝나고 연결을 해제하지 않고 양방향 통신이 가능하다는 특성이 있다.

웹소켓이 나오기 이전에는 HTTP를 가지고 폴링(polling), 롱폴링(long-polling), 스트리밍(streaming) 등의 실시간 통신처럼 보일 수 있게끔하는 방식을 사용하였다.

보통 사용하는 웹소켓의 구현체를 보면, 아직도 웹소켓이 지원되지 않는 환경에서는 롱폴링 등의 방식으로 HTTP를 활용하여 실시간통신처럼 동작하도록 하기도 한다.


HTTPS란?

  • 정의 : HTTP의 보안버전으로 SSL/TLS 프로토콜을 사용해 HTTP를 암호화해 주고 받을 때 쓰는 통신 프로토콜
  • 그림으로 보는 SSL/TLS Handshake
    1. 서비스를 서빙하는 서버가 CA로부터 CA 인증서를 발급받는다.

      a. 서비스를 서빙하는 서버는 CA에 자신의 도메인 정보와 서버 측 공개 키를 보낸다.

      b. 인증기관은 받은 두 데이터를 자신의 개인키로 암호화한 CA 인증서를 서버로 보낸다.


    1. 브라우저에서 도메인을 쳐서 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결을 맺는다.

    1. 서버는 브라우저가 보내준 Cipher Suite 중 하나를 고르고, 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리면서, 서버 자신의 도메인에 대한 CA 인증서를 보낸다.

    1. 브라우저는 브라우저에 내장된 CA의 공개 키를 이용하여 CA 인증서를 복호화하여 인증서가 유효한지 검증한 후, 서버 측의 공개 키를 얻는다.

    1. 브라우저는 앞으로 서버와 통신하는데 있어 암호화를 위해 사용할 대칭 키를 만들고, 그 대칭 키를 사이트 공개 키로 암호화하여 서버로 보낸다.

    1. 서버는 자신의 개인 키를 사용하여 암호화된 것을 복호화하여 사용자 대칭 키를 얻어 낸다.

    1. 이렇게 얻은 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신할 수 있게 된다.

HTTP 와 HTTPS 의 차이가 무엇인가요?
HTTP 와 HTTPS 의 가장 큰 차이는 SSL 인증서의 여부입니다.
HTTP 통신은 암호화되지 않은 평문으로 데이터를 전송하기 때문에 데이터 하이재킹의 위험이 있습니다.
그래서 이를 보안처리하기 위해 SSL/TLS 라는 프로토콜을 이용해 데이터를 암호화 전송하는데 이것을 HTTPS라고 합니다.

그렇다면 SSL이나 TLS는 어디서 발급해주나요?
클라이언트나 서버가 아닌 CA(인증기관)에서 발급해줍니다.
그렇기 때문에 클라이언트나 서버가 공격받더라도 암호 복호화가 쉽지 않습니다.

profile
개념을 이해하고 다른사람에게도 알려줄 수 있는 개발자가 되고 싶어요..

0개의 댓글