-
[Network] HTTP vs HTTPSCS/Network 2021. 9. 29. 11:49
이 포스팅은 세미나를 위해 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network를 참고하여 작성하였습니다.
HTTP(Hypertext Transfer Protocol)
텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
HTTP 동작
클라이언트가 브라우저를 통해서 어떠한 서비스를 URL을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.
HTTP 특징
- TCP를 사용한다.
- stateless
- 서버는 클라이언트의 요청(request)에 대한 정보를 유지하지 않는다.
→ 서버에는 수많은 요청이 들어오기 때문에 클라이언트의 state를 저장하기에 너무 복잡해짐(complex).
→ state를 저장할 필요가 없는 경우가 많음 (단순 조회 e.g., 로그인 하지 않은 홈 조회)
→ Cookie나 Session을 사용하여 클라이언트의 state를 저장할 수 있음
- 서버는 클라이언트의 요청(request)에 대한 정보를 유지하지 않는다.
- 연결 상태
- Persistent HTTP: 초기 TCP 연결을 성립하고 요청에 대한 응답이 끝나더라도 연결을 해제하지 않는다. 일정 시간(timeout) 이후 연결이 해제된다.
- Non-persistent HTTP: 매 요청마다 TCP 연결을 성립한다. 요청마다 TCP 연결을 위한 Round-trip time(RTT)가 추가로 든다. → HTTP Response time이 비교적 길어진다.
HTTP 문제점
- HTTP는 평문 통신이기 때문에 도청이 가능하다.
- 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
- 완전성을 증명할 수 없기 때문에 변조가 가능하다.
TCP/IP는 도청 가능한 네트워크이다.
TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.
보안 방법
- 통신 자체 암호화: SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 다른 프로토콜을 조합함으로써 HTTP 의 통신 내용을 암호화할 수 있다. SSL 을 조합한 HTTP 를 HTTPS(HTTP Secure) or HTTP over SSL이라고 부른다.
- 콘텐츠를 암호화: HTTP 메시지에 포함되는 콘텐츠만 암호화하는 것이다. 암호화해서 전송하면 받은 측에서는 그 암호를 해독하여 출력하는 처리가 필요하다.
통신 상대를 확인하지 않기 때문에 위장이 가능하다.
HTTP 에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에 누구든지 리퀘스트를 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우 요청이 오면 상대가 누구든지 응답을 반환한다. 이러한 특징은 여러 문제점을 유발한다.
- 리스폰스를 반환한 곳의 클라이언트가 원래 의도한 요청을 보낸 클라이언트인지를 확인할 수 없다.
- 통신하고 있는 상대가 접근이 허가된 상대인지를 확인할 수 없다.
- 어디에서 누가 요청 했는지 확인할 수 없다.
- 의미없는 리퀘스트도 수신한다. → DoS 공격을 방지할 수 없다.
보안 방법
- SSL을 사용하여 SSL이 제공하는 디지털 증명서로 요청 상대를 확인할 수 있다.
- 증명서는 신뢰할 수 있는 제 3 자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다.
- 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다.
완전성을 증명할 수 없기 때문에 변조가 가능하다
- 완전성 즉, 정보의 정확성을 증명할 수 없다.
→ 수신측에서 수신한 데이터가 송신측에서 보낸 내용과 일치한다는 것을 보장할 수 없음
→ 발신 후에 메세지를 빼앗아 변조하는 공격인 중간자 공격(Man-in-the-Middle)을 통해 메세지가 변조될 수 있음
보안 방법
- MD5, SHA-1 암호화 해시 함수 사용 or 디지털 서명으로 송신자의 신원을 증명한다.
→ 확실하지 않음 - SSL을 사용하여 SSL이 제공하는 메세지 다이제스트를 통하여 변조 여부를 확인한다.
→ 데이터 자체에서 계산한 메세지 다이제스트 값을 첨부하여 전송함
→ 데이터 수신 측에서는 데이터에서 계산한 메세지 다이제스트 값과 첨부된 메세지 다이제스트 값을 비교해 변조 유무를 확인함
HTTPS
- HTTP 통신하는 Transport layer protocol을 TCP가 아닌 SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 프로토콜로 대체하는 것
- HTTP는 SSL과 통신하고 SSL이 TCP와 통신한다.
HTTPS 단점
- HTTPS는 HTTP에 비해 CPU나 메모리 등 리소스를 더 많이 필요로 한다.
→ 최근 하드웨어의 발달로 HTTPS를 사용하더라도 속도 저하가 일어나지 않음
→ HTTP 2.0을 함께 사용하면 HTTPS가 오히려 HTTP보다 빠르게 동작함
→ 현재 모든 웹 페이지에서 HTTPS를 적용하고 있음
Reference
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'CS > Network' 카테고리의 다른 글
[Network] IP 주소 체계와 Subnet (0) 2021.12.11 [Network] DNS 동작 원리 (0) 2021.09.29 [Network] TCP vs UDP (0) 2021.09.28 [Network] TCP 연결과 해제 (0) 2021.09.28 [Network] HTTP Methods - GET, POST, PUT, PATCH, DELETE (0) 2021.09.27