[네트워크] HTTP & HTTPS

xoey·2024년 11월 19일

네트워크

목록 보기
6/10
post-thumbnail

2014년, 구글에서는 HTTP를 HTTPS로 바꾸라고 권고한다. 이전까지는 전자상거래가 있는 웹 사이트에서만 다소 번거로운 HTTPS를 사용하고 있었다. HTTPS로의 전환을 장려하기 위해 구글에서는 HTTPS를 사용하는 웹 사이트에 대해 검색 순위 결과에 가산점을 주겠다고 발표했다. 이는 사실상 HTTP를 사용하는 웹 사이트에 벌점을 주는 것과 마찬가지였다.

구글은 어떤 점 때문에 HTTPS로의 전환을 장려했을까? 각각에 대해 알아보자.

1. HTTP란?

HTTP(HyperText Transfer Protocol)란 전 세계 웹 브라우저와 서버 사이에서 데이터를 주고받기 위한 통신 규약이다. HTTP는 클라이언트-서버 모델을 기반으로 작동하는데, 웹 브라우저는 사용자가 URL을 입력하거나 링크를 클릭할 때마다 HTTP 요청을 보내고, 서버는 그 요청을 처리한 후 응답을 반환한다.

이 요청-응답의 반복을 통해 사용자와 서버 간에 데이터를 주고받는 통신이 이루어진다.

1.1. 구조

HTTP는 애플리케이션 레벨의 프로토콜로, TCP/IP 위에서 작동한다. HTTP는 상태 정보를 유지하지 않는 Stateless 프로토콜이며, 클라이언트가 요청을 보낸 후 서버가 응답하는 형태로 이루어진다.

HTTP 메세지는 Method, Path, Version, Headers, Body 등의 구성 요소 이루어져 있다.

  • Method: 클라이언트가 서버에 요청하는 방식(GET, POST 등)
  • Path: 요청할 리소스의 경로
  • Version: HTTP 버전 정보
  • Headers: 요청 또는 응답에 대한 부가 정보
  • Body: 실제 데이터(필요한 경우)

1.2. 작동 방식

1.2.1. HTTP 요청과 응답

  • 클라이언트(보통 웹 브라우저)가 서버에 데이터를 요청하는 방식이다. 클라이언트가 URL을 입력하면 해당 요청이 서버로 전송되고, 서버는 그 요청에 맞는 응답을 클라이언트에 반환한다.
  • HTTP는 다양한 상태 코드로 응답 상태를 나타낸다. 예를 들어, 클라이언트가 요청한 작업이 성공했는지, 실패했는지, 잘못된 요청이었는지 숫자 코드로 나타낸다.

1.2.2. 주요 상태 코드

  • 200 - OK: 요청이 성공적으로 처리되었음을 의미
  • 400 - Bad Request: 요청이 잘못되었거나 서버에서 이해할 수 없는 경우
  • 404 - Resource Not Found: 요청한 리소스를 찾을 수 없는 경우

1.3. 문제점

초기의 HTTP는 암호화되지 않은 평문 데이터를 전송하는 방식이었다. 이로 인해 민감한 정보(비밀번호, 주민등록번호 등)를 HTTP로 주고받으면 제3자가 정보를 가로챌 수 있는 문제가 있었다. 이러한 보안 문제를 해결하기 위해 HTTPS가 등장했다.

POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

username=johndoe&password=12345

2. HTTPS란?

HTTPS(HyperText Transfer Protocol Secure)란 HTTP에 보안 기능을 추가한 확장 버전이다. HTTPS는 SSL/TLS 프로토콜을 사용하여 클라이언트와 서버 간 통신을 암호화한다.

HTTPS의 핵심 기능은 데이터 전송 중에 제3자가 데이터를 가로채거나 볼 수 없도록 보호하는 것이다. 포트 번호는 HTTP와 다르게 443번 포트를 사용한다.

정리하자면, HTTPS는 HTTP에 SSL/TLS가 추가된 프로토콜이다.

2.1. SSL/TLS

SSL(Secure Socket Layer)/TLS(Transport Layer Security)란 웹 서버와 웹 브라우저 간의 암호화 통신을 위해 애플리케이션 계층에서 동작하는 프로토콜이다. 인증, 암호화, 무결성, 지원 프로토콜의 기능을 가진다.

SSL/TLS의 암호화는 세 가지 주요 요소로 구성된다.

  1. 비대칭키 암호화(Asymmetric Encryption)
    • SSL/TLS의 Handshake 과정에서 사용된다. (클라이언트-서버 세션 키(대칭키) 교환을 위한 초기 과정)
    • RSA, ECDHE(Elliptic Curve Diffie-Hellman Ephemeral) 알고리즘이 사용된다.
  2. 대칭키 암호화(Symmetric Encryption)
    • 비대칭키 암호화 방식이 속도가 느리다는 점 때문에 실제 데이터 전송 과정에서는 대칭키 암호화가 사용된다.
    • 이 대칭키는 Handshake 과정에서 안전하게 교환된 세션 키다.
  3. 해시 함수(Hash Function)
    • 데이터의 무결성을 확인하기 위해 사용한다.

2.2. 연결 과정

  1. 클라이언트가 서버에 HTTPS 연결 요청
    • 사용자가 브라우저에 HTTPS URL을 입력하면, 브라우저는 서버에 연결을 요청한다.
    • 서버와 SSL/TLS는 연결을 설정하려고 시도한다.
  2. 서버가 클라이언트에 SSL/TLS 인증서 전송
    • 서버의 공개키와 SSL 인증서의 유효성에 대한 정보를 포함한다.
  3. 클라이언트가 인증서를 검증
    • SSL 인증서의 서명 및 기만 만료 여부 등을 판단하여 유효성을 판단한다.
    • 이 과정에서 문제가 발생하면, 브라우저는 보안 경고를 표시한다. (e.g. 인증서 만료, 유효하지 않음 등)
  4. 세션 키 생성 및 교환(Handshake)
    • RSA, ECDHE 방식 중 하나로 세션 키를 안전하게 교환한다.
  5. 대칭키 암호화로 데이터 전송
  6. 해시 함수를 사용해 데이터 무결성 검증
    • HMAC(Hash-based Message Authentication Code) 등의 해시 함수를 사용한다.
  7. 세션 종료 및 키 폐기
    • ECDHE 방식에서는 세션이 종료될 때 임시 키도 폐기되어 순방향 비밀성을 보장한다.

2.3. HTTPS로의 전환의 필요성

2.3.1. 보안

HTTPS는 HTTP와 달리 SSL/TLS 암호화를 사용하여 클라이언트(사용자)와 서버 간에 주고받는 모든 데이터를 암호화한다. 이를 통해 데이터는 기밀성이 보장되고, 무결성이 인증되며, 서버의 신원이 인증된다.

민감한 데이터, 예를 들어 로그인 정보, 신용카드 세부 정보, 개인 식별 정보 등을 안전하게 보호하는 데 필수적이다.

2.3.2. 신뢰성과 사용자 경험

보안 외에도 신뢰성과 사용자 경험을 개선하는 데 중요한 역할을 한다. 특히, 브라우저가 HTTP 사이트와 HTTPS 사이트를 다르게 처리하기 때문에 사용자에게 큰 영향을 미친다.

  • 브라우저의 신뢰도 표시: HTTPS가 활성화된 웹 사이트는 브라우저 주소 표시줄에 자물쇠 아이콘이 표시된다. 이 아이콘은 사용자 웹 사이트가 안전하다는 것을 즉각적으로 인식할 수 있게 도움을 준다. 반대로, HTTP 웹 사이트는 ‘안전하지 않음’이라는 경고가 표시되며, 이는 사용자에게 부정적인 경험을 줄 수 있다.

  • 브라우저 경고 메세지: 2021년 이후 대부분의 브라우저(크롬, 파이어폭스 등)는 HTTP로 연결된 웹 사이트에 대해 경고 메세지를 표시한다. 사용자에게 ‘이 웹 사이트는 안전하지 않습니다.’라는 메세지가 뜨면, 많은 사용자가 즉시 이탈하게 되어 웹 사이트 방문자 수가 급격히 줄어들 수 있다. 이러한 경고는 사용자에게 불안감을 주기 때문에, 신뢰도가 낮아지는 결과를 초래한다.

2.3.3. SEO(검색엔진최적화)

구글을 비롯한 주요 검색 엔진들은 웹 사이트의 HTTPS 여부를 순위 결정 신호로 사용하고 있다. 구글은 HTTPS를 웹 사이트의 보안성을 평가하는 중요한 요소로 간주하며, 이를 사용하지 않는 웹 사이트는 검색 결과에서 불리한 위치에 놓이게 된다.


Reference

profile
[Roman 8:18] consider that our present sufferings are not worth comparing with the glory that will be revealed in us.

0개의 댓글