HTTP & HTTPS 모두
- TCP/IP의 최상위 계층에서 클라이언트/서버간 리소스 요청/제공을 담당하는 프로토콜이다
- 상태를 유지하지 않는
Stateless(무상태성) Protocol
이다
- 많은 데이터를 빠르게, 확실하게 처리하는 범위성을 확보하기 위해 상태를 유지하지 않는다.
- 쿠키/세션 또는 토큰 방식의 OAuth/JWT를 사용하여 HTTP 통신에서 상태를 관리할 수 있다.
http://www.hyunjoon.com
HTTP는
Hypertext Transfer Protocol
의 약자로
서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜이다.
- 서버에서 브라우저(클라이언트)로 데이터를 전송해주는 용도로 많이 사용된다.
- 또한 인터넷 초기의 모든 웹사이트에서 기본적으로 사용된 프로토콜이다.
- 80번 포트를 사용한다.
비연결지향 (Connectionless)
프로토콜이다.
- HTTP 통신을 할 때마다 TCP에 의해 연결/종료된다. (Response, Request를 한번 주고 받으면 연결을 끊는다)
- 연결을 끊어 서버에 부담을 줄이지만 리소스 요청시 오버헤드가 발생하여 오히려 더 큰 부하를 발생시킬 수 있다.
- 연결 상태를 유지하기 위해서
Request Header의 Connection 속성에 keep-alive를 적용하기도 한다.
지속 연결(Persistent Connections)
,파이프라이닝(Pipelining)
- 서버 또는 클라이언트가 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지한다.
- TCP 연결/해체를 위한 오버헤드가 줄어들어 서버에 부하가 경감된다.
- 파이프라이닝 기능으로 클라이언트가 서버에게 Request를 병행해서 보낼 수 있다.
👉 Communication Latency 가 감소된다.
서버에서 클라이언트로 전송되는 데이터가 암호화되지 않는 평문 통신을 하기 때문에
📌도청
을 하거나,
완전성을 증명할 수 없기에📌변조
가 가능하다는 보안 취약점을 가진다.
또한 통신 상대를 확인하지 않기 때문에📌위장
이 가능하다.
TCP/IP 구조의 통신은 전송되는 데이터를 통신 경로 상에서 엿볼 수 있기 때문에 패킷을 수집하는 것만으로도 도청이 가능하다.
SSL(Secure Socket Layer)
, TLS(Transport Layer Security)
라는 다른 프로토콜을 함께 조합하여 HTTP의 통신 내용을 암호화할 수 있다.
(HTTP와 SSL를 조합한 것을 HTTPS
또는 HTTP over SSL
이라고 부른다.)
HTTP를 사용하면서 HTTP 메시지에 포함되는 콘텐츠만 암호화하여 전송한다. 메시지를 받은 측에서 그 암호흫 해독하는 처리가 필요하다.
HTTP에 의한 통신은 상대가 누군지 확인하는 처리가 없기 때문에 누구든지 Request를 보낼 수 있다.
서버 측에서 IP 주소, Port 에 대한 접근 제한이 없을 경우 Request가 오면 상대가 누구든지 Response를 반환한다.
여러 문제점들
웹 서버A
에게 Request를 보내지만, 클라이언트는 자신에게 Response를 보내는 웹 서버가 A인지 B인지 확인할 수 없다클라이언트B
에게 Response를 반환하지만, 서버는 자신에게 Request를 보낸 클라이언트가 A인지 B인지 확인할 수 없다
SSL 인증서
로 상대를 확인할 수 있다.
SSL
은 상대를 확인하는 수단으로 SSL Certificate (인증서)
를 제공하고 있다. 이 인증서는 신뢰할 수 있는 제 3자 기관에 의해 발행되는 것으로 서버/클라이언트가 실재하는 사실을 증명한다.
완전성
이란 정보의 정확성을 의미한다.
완전성을 증명할 수 없다
는 뜻은 서버/클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다는 것을 보장할 수 없다는 의미다.
- Request/Response가 발신된 후 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이를 알 수 없다.
중간자 공격 (Man-in-the-middle)
: 공격자가 도중에 Request/Response를 빼앗아 변조하는 공격이다.
SSL에는 인증이나 암호화, Digest 기능을 제공하기 때문에 HTTPS를 사용하여 중간자 공격을 방지해야 한다.
MD5
, SHA-1
)을 확인하는 방법, 파일의 디지털 서명을 확인하는 방법이 있지만 확실하지 않다. 그렇기 때문에 HTTPS를 사용해야한다.
https://www.hyunjoon.com
HTTPS는
Hypertext Transfer Protocol Secure
의 약자이다. HTTPS는 HTTP의 일반 텍스트(text)에SSL
이나TLS
프로토콜을 씌워 통해 데이터를 암호화하는 기법으로 HTTP의 보안 문제를 보완한 프로토콜이다.
SSL(Secure Socket Layer)
또는 TLS(Transport Layer Security)
라는 프로토콜로 대체한 것이다.암호화
, 증명서
, 안전성 보호
를 이용할 수 있다.SSL
TLS
HTTPS는 대칭키 암호화를 사용 하며 다음과 같은 과정을 거친다.
CA
에서 발급받은 인증서
를 보낸다.CA의 공개키
로 복호화
하여 접속 요청 서버가 신뢰할만한지 검증한다클라이언트
는 데이터를 주고 받을 대칭키
를 생성한다클라이언트
는 대칭키를 서버의 공개키
로 암호화
하여 서버에게 전송한다.서버
는 자신의 비밀키로 클라이언트가 보낸 대칭키
를 복호화
한 뒤 그 대칭키를 통해 데이터를 주고 받는다.인터넷과 같은 공공 매체에서 두 참여자 간의 통신을 보호한다.
정보를 변조되지 않게 목적지에 도달하게 한다.
HTTPS를 통해 웹사이트의 진위 여부를 확인할 수 있다.
- 평문 통신에 비해 암호화 통신은 CPU/메모리와 같은 리소스를 많이 요구한다. 그러므로 서버 한 대당 처리가능한 Request 수가 평문 통신에 비해 줄어든다.
- 하지만 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도저하가 거의 일어나지 않고, HTTP/2.0을 함께 이용하면 HTTP보다 HTTPS가 더 빠르게 동작한다.
- 따라서 과거에는 민감한 정보를 다루는 경우에만 HTTPS에 의한 암호화 통신을 사용했지만 현재는 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌고 있다.
가속화된 모바일 페이지 (AMP, Accelerated Mobile Pages)
를 만들기 위해서 HTTPS 프로토콜을 사용해야한다.
AMP
란 모바일 기기에서 HTML의 불필요한 부분을 없애 더 빠르게 콘텐츠를 로딩하기 위한 방법으로 구글이 개발한 것이다.
대표적인 검색 포털 사이트 (구글, 네이버, 다음)에서
SEO(Search engine optimization)
를 통해 동일한 키워드를 포함한 사이트들 중 HTTPS 기반 사이트를 상위 노출해준다.