본문 바로가기
Tip & Tech/Tech

HTTP 와 HTTPS의 장단점 / 공개키암호화방식 / 인증기관(CA)이란?

by 나비와꽃기린 2020. 2. 24.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

* 출처 : '그림으로배우는 Http&Network Basic' 서적을 읽고 중요부분만 요약&정리 한 입니다 :)

 

HTTP의 단점

1. 평문(암호화 되지 않은) 통신이기 때문에 도청이 가능하다.

   --> 네트워크 상의 흐르는 패킷을 수집하여 도청할 수 있다

        ( 네트워크 패킷을 해석하는 패킷캡처나 스니처 라는 툴을 사용한다 )

2. 통신 상대를 확인하지 않기 때문에 위장이 가능하다.

3. 변조가 가능하다.

 

HTTP 단점을 해결하기 위해서는?

SSL이나 TLS를 사용하여 다른 프로토콜과 조합하여 HTTP통신 내용을 암호화 한다.

즉 SSL을 사용해 안전한 통신로를 확립하고 나서 그 통신로를 사용해 HTTP 통신을 하는 것이다.

 

또는 HTTP를 사용해서 운반하는 '내용'을 암호화하는 것이다.

HTTP 자체를 암호화 하는 것이 아닌 컨텐츠만 암호화 하는 것인데

다만 이 경우는 클라이언트에서 HTTP 메시지를 암호화해서 출력하는 추가처리가 힐요하다.

(또는 서버와 클라이언트가 콘텐츠의 암복호화 구조를 가지고 있으면 된다)

 

HTTP + 암호화 +인증 = HTTPS

애플리케이션(HTTP)
TCP
IP

<HTTP>

 

애플리케이션(HTTP)
SSL
TCP
IP

<HTTPS>

 

HTTPS는 HTTPS통신을 하는 소켓 부분을 SSL(Secure Socket Layer)나  TLS(Transport Layer Security)로 대체하는 프로토콜이다. SSL이라는 껍질을 덮어 쓴 HTTP가 HTTPS인 것.

TLS는 SSL을 바탕으로 한 프로토콜로, 이 프로토콜을 총칭해서 SSL이라고 부르기도 한다.

 

SSL에서는 공개키암호화 방식을 사용한다.

암호화와 복호화에 하나의 키를 같이 사용하는 방식을 공개키암호화방식이라고 한다.

공개키 암호화 방식에서는 서로 다른 두개의 키(쌍)를 사용하는데 한쪽은 비밀키라고 부르고 다른 한쪽은 공개키라고 부른다. 이름대로 비밀키는 알려지면 안되는 키며 공개키는 누구에게나 알려져도 괜찮은 키를 말한다.

 

정보를 전송하는 측이 상대의 공개키를 사용하여 암호화를 한다.

정보를 수신하는 측은 자시노의 비밀키를 사용하여 복호화를 한다.

 

이 방식에서 암호를 푸는 것은 바로 '비밀키'인데 통신으로 비밀키를 보낼 필요가 없기 떄문에

도청에 의해서 키를 빼앗길 걱정은 없다.

 

 

다만, 공개키암호화방식에도 문제는 있다. 그래서 인증기관(CA)를 사용한다.

바로 공개키가 진짜인지 가짜인지 증명할 수가 없다는 것.

도중에 해커가 공개키를 바꿔치기 했을 수도 있다.

따라서 이 문제를 해결하기 위해 인증기간(CA : Certificate Authority)과 그 기관이 발행한 공개키 증명서가 이용된다.

여기서 CA란 클라이언트와 서버가 모두 신뢰하는 '제3자기관'을 의미한다.

유명한 인증기관에는 Versign사가 있다.

 

 

1. 서버의 운영자가 인증기관(CA)에 서버의 공개키를 제출

2. 인증기관(CA)는 제출된 공개키에 인증기관의 비밀키로 디지털서명을 하여, 공개키증명서를 작성

3. 서버는 CA에 의해서 작성된 공개키증명서를 클라이언트에 보내 공개키암호화방식으로 통신

4. 클라이언트는 인증기관(CA)의 공개키를 사용하여 해당 증명서를 해독.

  ( 진짜 인증기관에서 발급한게 맞는지 등을 체크할 수 있음 )

 

--> 여기에서 클라이언트는 해독을 위해 인증기관의 공개키가 필요한데 이는 통신 중 안전하게 전달하는 방식은

어렵기 때문에 많은 브라우저가 주요 인증 기관의 공개키를 사전에 내장한 상태로 제품을 내놓는다.

 

* 신뢰할 수 있는 루트인증 기관

* 인증서확인 방법 : URL 옆 자물쇠모양 클릭.

 

 

암호화와 인증까지 거친 HTTPS!

HTTPS 에는 단점이 없을까?

물론 HTTPS에도 단점이 있다.

HTTPS는 SSL을 사용하기 때문에 처리가 늦어진다는 단점이 있다.

그 말인 즉슨 서버,클라이언트 모두가 암복호화 처리가 필요하기 때문에  CPU나 메모리 등의 하드웨어 리소스 소비가 불가피하다는 것이다. 그리고 SSL을 사용함으로써 네트워크 리소스를 더 소비하기 때문에 HTTP보다 통신 처리에 시간이 걸린다. (네트워크의 부하가 있다라는 말이며 HTTPS는 HTTP에 비해 약 2~100배 느리다고 한다)

 

그런데 모든 웹사이트가 HTTPS를 사용하는 것은 아니던데?

위와 같은 질문이 있을 수 있다.

왜 모든 웹사이트가 HTTPS를 사용하지 않는 것일까?

그 이유는 위에서도 정리했듯 평문통신 HTTP 보다 HTTPS가 CPU나 메모리 등 리소스를 많이 소기하기 때문에 한 서버당 처리할 수 있는 리퀘스트의 수가 줄어들게 되기 때문이다.

액세스가 많은 웹사이트 같은 경우는 암호화를 한다면 그 부하가 상당하게 되고

따라서 HTTP를 암호화 하는 것이 아닌 숨겨야 하는 정보만을 암호화하여 리소스를 절약하기도 한다.

 

두번째는 HTTPS를 사용하기 위해서는 인증기관을 통해 증명서를 구입해야 하는데 이 가격이 사업자마다

다르긴 하지만 일반적으로 년간 수십만원 정도가 필요하기 때문에

증명서 구입비용이 부담되는 서비스나 개인적인 웹 사이트등은 HTTP만 선택하여 사용하는 경우도 있다.

(혹은 민감한 개인정보 등을 다루지 않는 일반적인 웹사이트 등..)