HTTP / HTTPS

Angela_Hong·2023년 3월 2일
1

HTTP (HyperText Transfer Protocol)
HTTPS (HyperText Transfer Protocol Secure)
둘 다 인터넷에서 데이터를 전송하기 위한 프로토콜(통신규약)

HTTP

HTTP는 인터넷에서 가장 일반적으로 사용되는 프로토콜 중 하나로,
웹 브라우저와 웹 서버 사이에서 HTML, 이미지, 동영상 등의 리소스를 주고 받을 때 사용한다.
클라이언트-서버 모델을 기반으로
클라이언트(웹 브라우저)가 서버(웹 서버)에게 요청을 보내면 서버는 요청에 따라 적절한 리소스를 응답해주는 방식으로 동작한다.
HTTP는 암호화되지 않은 텍스트 통신이기 때문에 데이터를 가로채는 공격자는 데이터를 쉽게 읽을 수 있다.

HTTPS

HTTP와 동일하게 클라이언트-서버 모델을 기반으로 동작
SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 암호화된 텍스트 통신을 제공한다.
HTTP에 암호화와 인증 기능을 추가한 것으로,
데이터를 암호화하여 보호하고, 인증서를 통해 통신 상대의 신원을 확인하는 기능을 제공한다.
이를 통해 중간자 공격과 같은 보안 위협으로부터 데이터를 보호할 수 있다

HTTP / HTTPS 차이점

  1. 데이터 전송과정에서의 차이점
    HTTP는 암호화되지 않은 텍스트 통신이기 때문에 데이터 전송과정에서 암호화가 이루어지지 않는다.
    따라서 데이터를 가로채는 공격자는 데이터를 쉽게 읽을 수 있다.
    HTTPS는 SSL/TLS 프로토콜을 사용하여 암호화된 텍스트 통신을 한다.
    HTTPS는 데이터를 암호화하기 때문에 중간에 데이터를 가로채도 안전하다.
  1. 보안성과 암호화 기술의 차이점
    HTTP는 암호화되지 않기 때문에 데이터를 보호하기 위한 추가적인 보안기능이 없다.
    HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 인증서를 통해 통신 상대의 신원을 확인하는 기능을 제공한다.
    이를 통해 중간자 공격과 같은 보안 위협으로부터 데이터를 보호할 수 있다.
    ( 아래서 추가 설명 )
  1. 사용되는 포트의 차이점
    HTTP는 80번 포트를 사용하여 통신 / HTTPS는 443번 포트를 사용하여 통신
    웹 브라우저와 웹 서버가 데이터를 주고 받는 포트 번호이다.

결론
이런한 차이점들로 인해
HTTPS는 HTTP보다 보안성이 높다.
HTTPS는 인터넷 뱅킹, 쇼핑몰 등에서 보안이 중요한 정보를 주고 받는데 사용하고,
HTTP는 보안성이 필요하지 않은 간단한 데이터 전송에 사용한다.
따라서 보안이 필요한 정보를 주고 받는 곳에서는 HTTPS를 사용하는 것이 좋다.

HTTPS 사용 이유

  1. 보안성 강화
    HTTPS는 SSL/TLS 암호화 프로토콜을 사용하여 클라이언트와 서버 간의 통신을 암호화한다.
    중간자 공격과 같은 해킹, 스파이웨어 등의 공격을 방지할 수 있다.
  1. 개인정보 보호
    HTTPS는 인증서를 통해 클라이언트가 접속한 서버의 신원을 확인한다.
    이를 통해 악의적인 사이트로부터 사용자의 개인정보를 보호할 수 있다.
    HTTPS를 사용하는 사이트는 주소 표시줄에 “https://”와 함께 보안 자물쇠 아이콘이 표시되어있다.
  1. 검색 엔진 최적화
    HTTPS는 구글 등의 검색엔진에서 검색 결과 순위를 높이는 요소 중 하나이다.
    검색 엔진은 보안이 강화된 HTTPS 사이트를 선호하며,
    HTTPS를 사용하는 사이트는 검색 결과에서 더 높은 우선순위를 얻을 수 있다.
  1. 브라우저 경고 회피
    최근 브라우저들은 HTTP 사이트에서 개인정보를 입력하려고 할 때 경고 메시지를 표시
    HTTPS를 사용하면 이러한 경고 메시지를 회피할 수 있음

결론
따라서 HTTPS를 사용함으로써 보안과 개인정보 보호를 강화하고 검색엔진 최적화와 브라우저 경고 회피 등의 이점을 얻을 수 있어서 사용한다.

HTTP 요청과 응답

:authority: www.naver.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xthml+xml 쏼라
accept-encoding: grip, deflate, br
accept-language: ko-KR, ko;q=0.9, en-US;q=0.8 등등
cache-control: no-cache

section2 unit7도 참고하면 좋음

  1. HTTP 요청 request
    HTTP요청은 클라이언트가 서버로 보내는 메시지
    start line 시작줄 : HTTP 메서드 (GET, POST 등)와 요청 대상 URL, HTTP 버전으로 구성된다.
    Header 헤더 : 요청에 대한 추가 정보를 포함하며, 키-값 쌍 형태로 구성된다.
    blank line 빈 줄 : 요청에 대한 모든 메타 정보가 전송되었음을 알린다.
    Body 바디 : 요청 메시지와 함께 전송되는 데이터로, 생략 가능하다.
  • HTTP 메시지의 시작줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며,
    HTTP 메시지의 페이로드는 body본문이라고 한다.
  1. HTTP 응답 response
    HTTP 응답은 서버가 클라이언트에게 보내는 메시지
    start line 시작줄 : HTTP 버전, 성공했는지 실패했는지에 관한 상태코드와 함께 상태 메시지로 구성된다.
    Header 헤더 : 응답에 대한 추가 정보를 포함하며, 키-값 쌍 형태로 구성된다.
    blank line 빈 줄 : 응답에 대한 모든 메타 정보가 전송되었음을 알린다.
    Body 바디 : 응답 메시지와 함께 전송되는 데이터로, 생략 가능하다.

HTTP 요청과 응답은 서로 다른 방향으로 전송되며, 요청과 응답은 항상 쌍으로 이루어진다.
클라이언트는 HTTP 요청을 보내고, 서버는 HTTP 응답을 반환한다.
이렇게 요청과 응답이 반복되면서 클라이언트와 서버간에 원하는 정보를 주고 받을 수 있다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages
*이거 무조건 참고하기*

HTTP 요청 헤더

HTTP 요청 헤더는 HTTP 요청 메시지의 일부로, 클라이언트가 서버로 보내는 요청에 대한 추가 정보를 포함한다.
HTTP 요청 헤더는 키-값 쌍 형태로 구성된다.

  1. 일반 헤더(General Header)
    Cache-Control: 캐시 제어를 위한 지시자를 포함한다.
    Connection: 클라이언트와 서버 간의 연결을 제어한다.
    Date: 메시지 생성 일자와 시간을 포함한다.
    Pragma: 이전 버전의 HTTP 프로토콜과의 호환성을 유지하기 위한 정보를 포함한다.

  2. 요청 헤더(Request Header)
    Accept: 클라이언트가 서버에게 요청하는 콘텐츠 유형을 나타낸다.
    Accept-Encoding: 클라이언트가 서버에서 받기를 원하는 콘텐츠 인코딩 방식을 나타낸다.
    Authorization: 클라이언트의 인증 정보를 포함한다.
    Host: 요청을 처리할 서버의 호스트명과 포트 번호를 나타낸다.

  3. 엔터티 헤더(Entity Header)
    Content-Type: 요청 본문의 콘텐츠 유형을 나타낸다.
    Content-Length: 요청 본문의 길이를 나타낸다.
    Content-Encoding: 요청 본문의 인코딩 방식을 나타낸다.
    Content-Language: 요청 본문의 언어를 나타낸다.

HTTPS 암호화 방식

HTTPS는 HTTP 프로토콜을 기반으로 하지만, 데이터 전송 과정에서 보안을 강화하는 프로토콜이다.
HTTPS는 데이터 전송 중 노출되거나 조작되는 것을 방지하기 위해 암호화방식을 사용한다.

  1. SSL/TLS 프로토콜
    SSL/TLS는 공개키 암호화 방식을 사용하여 클라이언트와 서버 간의 통신을 보호한다. SSL/TLS는 서버 인증, 클라이언트 인증 및 데이터 암호화를 수행한다.
    CA를 통한 인증서 사용, 대칭키 공개키 암호화 방식을 모두 사용한다.
    ( SSL이 표준화 되면서 바뀐이름이 TLS니까 같은 걸 말함!
    그리고 서버는 인증서 발급받기 위해 CA라는 기관을 통해서 진행하게 되는데, CA로 서버의 정보와 공개키를 전달하면, CA로부터 서버의 공개키랑 지들의 비밀키로 암호화한 인증서를 받아여. 그러면 그걸 서버가 클라이언트에게 인증서 보내주고 이런 과정을 거친답니다. 지금은 대강 알아두대여)
  1. 공개키(비대칭키) 인프라 (PKI)
    SSL/TLS 프로토콜은 공개키를 사용한다. PKI는 전자서명, 인증서 발급 및 관리, 인증서 폐기 등을 포함한 공개키 기반 보안 시스템이다.
    PKI를 사용하면 클라이언트가 서버의 인증서를 확인할 수 있다.
  • 공개키는 2개의 키를 사용한다. 즉 암호화할때 사용한 키랑 복호화할때 사용하는 키가 다름! >> 키 이름을 공개키, 비밀키라고 함. (그렇기 때문에 보안성이 더 좋겠져? 단, 키가 2개니까 더 많은 시간을 소모해염)
  1. 대칭키 암호화
    SSL/TLS는 대칭키 암호화 방식도 사용하는데, 대칭키 암호화는 같은 키로 암호화와 복호화를 수행하는 알고리즘이다.
    대칭키 암호화는 데이터 전송 시간을 단축할 수 있지만, 키 교환 문제가 있어서 SSL/TLS에서는 공개키 암호화 방식과 함께 사용된다.
  • 대칭키 암호화 방식은 하나의 키만 사용한다. 즉, 암호화할때 사용한 키로 복호화를 한다는 의미. (하나의 키를 사용하니까 당연히 속도가 빠르겠져? 다만, 키 탈취당하면 끝! 키 관리 중요!)

이러한 암호화 방식을 사용하여 HTTPS는 데이터 전송 과정에서 보안성을 보장한다. 따라서, 웹사이트에서 중요한 정보(예: 로그인 정보, 금융 정보 등)를 제공하는 경우에 HTTPS를 사용하는 것이 안전하다.

결론
서버와 클라이언트 간의 CA를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우른 프로토콜을 SSL/TLS라고 말하고,
HTTP에 SSL/TLS 프로토콜을 더한 것을 HTTPS라고 한다.

0개의 댓글