본문 바로가기

CS/네트워크

HTTP와 HTTPS

HTTP에 대해서는 알아봤다.

그렇다면 HTTP의 문제점에는 무엇이 있을까?

1. HTTP는 평문 통신이기 때문에 도청이 가능하다.

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

3. 완전성을 증명할 수 없기 때문에 변조가 가능하다.

 

위 3가지는 암호화를 하지 않는 다른 프로토콜에서도 공통적인 문제점들이다.

각 문제점들에 대해 조금 더 자세히 알아보자.

1.  HTTP는 도청이 가능하다.

HTTP는 TCP/IP 위에서 동작하며 TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다.

패킷을 수집하는 것만으로도 도청할 수 있다.

평문으로 통신할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.

 

보안 방법

  • 통신 자체를 암호화한다. SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 프로토콜을 조합함으로써 HTTP의 통신 내용을 암호화할 수 있다. SSL을 조합한 HTTP를 HTTPS라고 부른다.
  • 콘텐츠를 암호화한다. HTTP를 사용해서 운반하는 내용인, HTTP 메시지에 포함되는 콘텐츠만 암호화하는 것이다. 암호화해서 전송하면 받은 측에서는 해독하여 출력하는 처리가 필요하다.

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

HTTP에 의한 통신에는 상대가 누구인지 확인하는 처리가 없기 때문에 누구든지 request를 보낼 수 있다.

IP 주소나 포트 등에서 웹 서버에 액세스 제한이 없는 경우 request가 오면 상대가 누구든지 무언가의 response를 반환한다.

이러한 특징은 여러 문제점을 유발한다.

1. request를 보낸 곳의 웹 서버가 원래 의도한 response를 보내야 하는 웹 서버인지를 확인할 수 없다.

2. response를 반환한 곳의 클라이언트가 원래 의도한 request를 보낸 클라이언트인지 확인할 수 없다.

3. 통신하고 있는 상대가 접근이 허가된 상대인지 확인할 수 없다.

4. 어디에서 누가 request를 했는지 확인할 수 없다.

5. 의미없는 request도 수신한다. -> DoS 공격을 방지할 수 없다.

 

보안 방법

암호화 방법으로 언급된 SSL로 상대를 확인할 수 있다. SSL은 상대를 확인하는 수단으로 증명서를 제공하고 있다.

증명서는 신뢰할 수 있는 제 3자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실제하는 사실을 증명한다.

이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성을 줄일 수 있다.

한 가지 이점을 더 꼽자면, 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에도 사용할 수 있다.

3.  완전성을 증명할 수 없기 때문에 변조가 가능하다.

여기서 완전성이란 정보의 정확성을 의미한다.

서버 또는 클라이언트에서 수신한 내용이 송신 측에서 보낸 내용과 일치한다라는 것을 보장할 수 없는 것이다. 

request나 response가 발신된 후에 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다.

이와 같이 공격자가 도중에 request나 response를 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-Middle)이라고 부른다.

 

보안 방법

MD5, SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 확인할 수 있는 것은 아니다.

확실히 방지하기 위해서는 HTTPS를 사용해야 한다.

SSL에는 인증이나 암호화, 다이제스트 기능을 제공하고 있다.

 

그럼 이러한 문제점들을 해결한 HTTPS에 대해 알아보자.

HTTPS

HTTPS는 인터넷상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고받을 때 쓰는 통신 규약이다.

HTTP에 암호화와 인증, 그리고 완전성 보호를 더한 것이다.

HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아닌, HTTP 통신하는 소켓 부분을 SSL 또는 TLS라는 프로토콜로 대체한 것이다.

HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서는 HTTP는 SSL과 통신하고 SSL이 TCP와 통신한다.

SSL을 사용한 HTTPS는 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.

 

모든 웹 페이지에서 HTTPS를 사용해도 될까?

HTTPS는 평문 통신에 비해 암호화 과정을 거치기 때문에 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 거치면 추가적인 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 request의 수가 상대적으로 줄어들게 된다. 

하지만, 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용하면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다고 한다.

따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.

'CS > 네트워크' 카테고리의 다른 글

웹 통신의 흐름  (0) 2022.09.29
SSL  (0) 2022.09.28
GET과 POST의 차이  (0) 2022.09.15
HTTP  (0) 2022.09.12
TCP와 UDP  (0) 2022.09.09