HTTP와 HTTPS의 차이와 HTTPS 암호화 방식.

성민개발로그·2022년 3월 17일
0

프론트엔드

목록 보기
6/10
post-thumbnail

HTTP란?

Hyper Text Transfer Protocol 의 약어로 서로다른 시스템들 사이에서 통신을 주고받게 하는 가장 기본적인 프로토콜 (서버에서 브라우저로 데이터 전송하는 용도로 가장 많이 사용한다)

HTTPS란?

HTTPS(HyperText Transfer Protocol Secure)는 기존 프로토콜(컴퓨터 사이의 데이터 교환 방식 규칙 정의)에서 데이터가 쉽게 도난 당할 수 있는 것을 방지하기 위해서 SSL(보안 소켓)을 사용하면서 브라우저와 서버 사이에 안전하게 암호화된 연결을 만들 수 있게 도와줍니다.

여기서 중요한게 HTTPS 는 HTTP 자체를 암호화 하는게 아닙니다 . HTTP 프로토콜를 사용해서 운반되는내용을 암호화하는 것입니다.

또한 TLS(전송 계층 보안) 프로토콜을 통해서도 보안을 유지합니다.

TLS는 데이터 무결성을 제공하므로 데이터가 전송 중에 손상되거나 수정되는 것을 방지합니다.

또한, HTTPS의 장점은 검색엔진 최적화(SEO에 도움이 됩니다. 구글과 같은 포털에서는 HTTPS를 사용하는 웹 사이트에 가산점을 부여합니다. 별개로 주소창 옆에 HTTPS가 아니라면 주의 요함 과 같은 경고 문구가 있는데 사용자 측면에서도 자주 들어가고 싶지 않겠지요.

SSL/TLS란?

TLS는SSL의 업그레이드 버전이라고 보면 된다. 결국 똑같은것을 얘기하는 것이다.

SSL은 Secure Sockets Layer의 약자로 웹 서버와 웹 브라우저간의 보안을 위해 만든 프로토콜이다. 공개키/개인키, 대칭키 기반으로 사용된다.

대칭키란?

동일한키로 암호화와 복호화를 수행하는 것을 말합니다.

대칭키는 암호화와 복호화가 쉽다는 장점을 가지고있습니다.하지만 키를 배송할때 문제가 된다는 단점이 있습니다 (해커가 키를 가로채기만하면 암호화된 정보를 복호화해서 볼수 있기 때문이다)

공개키란?

서로다른키(공개키, 개인키)로 암호화 복호화를 수행하는 방법입니다. 공개키로 암호화를 하고 개인키로 복호화를 한다. 공개키를 전송할때 중간에 해커가 가로채도 아무런 영향이 없음 암호화가 훌륭함 하지만 공개키 방식은 암호화 연산시간이 길어 비용이 크다.

SSL은 그래서 공개키와 대칭키의 의 단점을 보완하기 위해서 두방식을 골고루 사용해서 보안을 지킨다

SSL 통신과정

가장 먼저 신뢰성을 위한 CA인증서를 사용합니다

  1. 먼저 서버의 공개키를 CA에다가 등록하여 CA의 개인키를 통해서 공개키 인증서를 발급받는다(인증이 된 경우에만) CA의 공개키는 브라우저에 자체 내장이 되어있습니다.
  2. 클라이언트가 서버에게 접속요청을 했을 때 서버는 클라이언트에게 인증기관에서 받은 인증서를 보내준다.
  3. 클라이언트는 브라우저에 내장된 공개키로 해당 인증서를 검증한다. 검증이 된후에 서버의 공개키는 클라이언트의 대칭키로 암호화를 진행해서 암호화된 대칭키를 서버에게 보냄.
  4. 서버는 클라이언트의 암호화된 대칭키를 자신의 개인키로 복호화해서 대칭키를 얻어낸다.
  5. 클라이언트와 서버는 복호화한 대칭키로 서로 데이터를 주고받는다.

http 특성

Stateless: http 통신에서 서버는 클라이언트의 상태를 저장하지 않는다. 클라이언트의 상태를 저장하지 않는다는 말은 클라이언트가 전에 했던 요청이 무엇인지에 따라 반응이 달라지지 않는다는 것이지.

초기 버전(HTTP 1.0) : 비-연결지향(Connectionless)

  • HTTP 통신을 한 번 할때마다 TCP에 의해 연결-종료를 할 필요가 있었습니다. 한번 Request, Response를 주고받으면 연결을 끊음
  • 서버의 부담을 줄일 수 있지만, 리소스 요청시마다 오버헤드가 발생해 더 많은 부하를 발생시킬 가능성이 있습니다.
  • Request Header의 Connection 속성에 keep-alive를 적용해 연결 상태를 유지할 수 있습니다.

현재 버전(HTTP 1.0 이후) : 지속 연결(Persistent Connections)파이프라이닝(Pipelining)

  • 서버 또는 클라이언트에서 명시적으로 연결을 종료하지 않는 이상 TCP 연결(TCP Connection)을 계속 유지합니다.
  • TCP 연결/해제를 위한 오버헤드가 줄어, 서버에 대한 부하가 경감됩니다.
  • HTTP Request, Response가 빠르게 완료되기 때문에, 웹 페이지를 빨리 표시할 수 있습니다.
  • HTTP 파이프라이닝(Pipelininig) 기능이 추가되어 Request를 병행해서 보내는 것이 가능해졌습니다.

0개의 댓글