HTTP vs HTTPS

박희중·2022년 4월 7일
0

HTTP

목록 보기
1/1
post-thumbnail

HTTP이란

  • HyperText Transfer Protocol

주로 사용하는 HTTP/1과 HTTP/2은 TCP를 사용하고 HTTP/3부터는 UDP를 사용하며 80번 포트를 사용한다


HTTP 특징: 무상태, 비연결성


무상태 프로토콜(Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는 프로토콜을 말한다.
  • 따라서 서버가 클라이언트를 식별할 수 없다.
  • 서버가 클라이언트의 상태를 보존하지 않기 때문에 서버 확장성이 높다 (스케일아웃 Scale-out, 수평확장)
  • 클라이언트가 추가 데이터를 전송해야한다.

쿠키, 세션, 토큰을 이용하여 상태를 기억할 수 있다.(Stateful)



비연결성 프로토콜

  • 비연결성 프로토콜이란 연결 상태를 유지하지 않는 프로토콜을 말한다.

  • HTTP는 기본이 연결 상태를 유지하지 않는 모델이다.

  • 서버 자원을 효율적으로 사용할 수 있다.

  • 한계
    TCP/IP 연결을 새로 맺어야 한다 - 3 way handshake 시간 추가
    웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JS, CSS, 추가 이미지 등등
    수 많은 리소스가 함께 다운로드한다.


HTTP는 정보를 텍스트로 주고 받는다. 단순 텍스트를 주고 받기 때문에 네트워크에서 전송 신호를 인터셉트하는 경우 원하지 않는 데이터 유출이 발생할 수 있다.

이와 같은 HTTP의 보안 취약점을 해결하기 위한 프로토콜이 HTTPS다.



HTTPS

  • HyperText Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure

  • 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전

  • 기존 HTTP 레이어에서 SSL(TLS) 프로토콜을 얹어 평문 데이터를 암호화

  • 소켓 통신에서 일반 텍스트를 이용하는 대신, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화 -> 데이터의 적절한 보호 보장

  • 서버와 클라이언트 사이의 모든 통신 내용이 암호화

  • TCP/IP 443번 포트 사용

  • 인증, 전자상거래와 같이 보안이 중요한 트래픽에 이용



HTTPS 보안이 뛰어난 이유

HTTP와 HTTPS의 차이: SSL 인증서
SSL 인증서는 사용자가 사이트에 제공하는 정보를 암호화한다.
이렇게 전송된 데이터는 중간에서 누군가 훔쳐 낸다고 하더라도 데이터가 암호화되어있기 때문에 해독할 수 없다.



대칭키와 공개키 방식

대칭키

  • 암호화에 쓰이는 키와 복호화에 쓰이는 키가 동일한 기법
  • 만약 클라이언트와 서버가 대칭키 방식으로 통신을 한다면 클라이언트도 키를 가지고 있어야한다.
  • 클라이언트에게 키를 전달하기도 위험하며 클라이언트의 소스코드는 누구든지 열어볼 수 있으므로 가지고 있기도 위험하다.
  • 즉, 원거리에서 대칭키를 안전하게 전달하는 것이 매우 어렵다.

공개키(비대칭키)

  • 공개키는 두 개의 키를 갖게 되며, A키로 암호화하면 B키로 복호화가 가능하며, 반대로 B키로 암호화하면 A키로 복호화 가능
  • 여기서 두 개의 키 중 하나는 공개키(public key)가 되고, 하나는 비공개키(private key)가 된다.
  • 공개키는 소유자와 타인에게 공개되고, 비공개키는 소유자만 가지고 있게 된다.
  • 이 방법은 안전하게 데이터를 주고 받을 수 있지만 속도가 느리다는 단점이 있다.


HTTPS 원리

HTTPS 동작방식은 대칭키공개키(비대칭키) 방식을 전부 사용하는 하이브리드 방식이다.

데이터 전송을 위해 대칭키 방식을 사용하며 대칭키를 안전하게 전달하기 위해 공개키 방식을 사용한다.

쉽게 말해서, 공개키(비대칭키) 방식을 사용하여 대칭키를 전달 -> 전달된 대칭키을 사용하여 데이터 전송한다.


HTTPS 원리

1. 클라이언트가 난수 값을 생성하여 서버로 전송한다.

2. 서버측에서 생성한 난수 값과 해당 서버의 인증서를 클라이언트에 전송한다.

3. 클라이언트는 서버의 인증서가 믿을 수 있는 지 브라우저에 내장된 CA들의 정보를 통해 확인한다.

(공개키방식) CA의 인증을 받은 인증서들은 해당 CA의 개인키로 암호화되어 있으므로 브라우저에 저장된 해당 CA의 공개키로 복호화된다면 신뢰할 수 있음을 뜻한다.
(해당 CA의 공개키로 복호화될 수 있는 인증서를 발급할 수 있는 것은 그에 대응하는 개인키를 가진 CA뿐이기 때문이다.)

4. 성공적으로 복호화된 인증서엔 서버의 공개키가 포함되어 있다.

5. 클라이언트는 1, 2번에서 생성하고 받은 두 난수 값을 혼합하여 임시 키(pre-master-key)를 생성한다.

6. 클라이언트는 만든 임시 키를 서버의 공개키로 암호화해서 서버로 전송한다.

7. 서버는 클라이언트로부터 전송받은 임시 키(pre-master-key)를 정상적으로 복호화 후 대칭키(master-key)로 승격한다.

8. 이 후 서버와 클라이언트 둘만 갖고 있는 대칭키를 사용하여 데이터들을 전송한다.



HTTPS 장점

위에서 말했듯이 보안 측면에서 장점이 있다.

가벼운 웹 서핑이라면 HTTP를 사용해도 되지만 자료를 주고 받는 경우 심각한 개인 정보 유출로 이어질 수 있다.

결제 시스템을 도입하거나 회원가입과 같이 사용자 정보를 웹 서버와 주고 받아야 하는 경우라면 HTTP는 정보 유출의 위험성을 갖게 된다.


또 다른 장점으로는 마케팅 측면에도 있다.

HTTPS로 전환하게 되면 검색엔진 최적화(SEO)에 있어서도 큰 혜택을 볼 수 있다.

구글은 HTTP에서 HTTPS로의 전환을 장려하기 위해 구글에서는 HTTPS를 사용하는 웹사이트에 대하여 검색 순위 결과에 가산점을 주겠다고 발표하였다.

따라서 더 높은 검색 순위 결과를 가질 수 있을 뿐만 아니라 사용자들이 결국에는 가장 안전하다고 생각하는 사이트를 더 많이 방문하기 때문에 마케팅 측면에서도 우위를 가진다.

profile
백엔드 엔지니어 박희중입니다.

0개의 댓글