HTTP(Hypertext Transfer Protocol)
HTTP
는 하이퍼 텍스트 전송 프로토콜의 약자입니다. 인터넷에서 웹 서버와 사용자 브라우저 간에 요청/응답(request/response)으로 하이퍼텍스트 문서를 주고 받기 위해 사용되는 통신 규약입니다. 웹 서핑을 할 때 서버에서 본인의 브라우저로 데이터를 전송해 주는 용도로 가장 많이 사용됩니다.
HTTP의 특징
- TCP와 UDP를 사용하며, 80번 포트를 사용한다.
비연결(Connectionless)
- 클라이언트가 요청을 서버에 보내고 서버가 적절한 응답을 클라이언트에 보내면 바로 연결이 끊긴다.
무상태(Stateless)
- 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
HTTP 의 문제점
- HTTP 는 평문 통신이기 때문에 도청이 가능하다.
HTTP는 TCP/IP 위에서 동작을 하는데 TCP/IP 는 도청 가능한 네트워크이다. 즉, TCP/IP 구조의 통신은 전부 네트워크 상에서 흐르는 패킷을 수집하는 것만으로 도청할 수 있다. 그렇기에 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.
자세히
< 보완 방법 >
- 통신 자체를 암호화.
SSL(Secure Socket Layer)
orTLS(Transport Layer Security)
라는 다른 프로토콜을 조합함으로써 HTTP 의 통신 내용을 암호화할 수 있다. SSL 을 조합한 HTTP 를HTTPS(HTTP Secure)
orHTTP over SSL
이라고 부른다. 전송하는 데이터를 암호화해서 중간에 누군가가 패킷을 가로채더라도 그 안의 내용을 해석하지 못하도록 하는 기능입니다. 암호화해서 전송하면 받은 측에서는 그 암호를 해독하여 출력하는 추가처리가 필요하다.
- 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
자세히
HTTP 에 의한 통신에는 상대가 누구인지 확인하는 처리가 없기 때문에 누구든지 리퀘스트를 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우 리퀘스트가 오면 상대가 누구든지 무언가의 리스폰스를 반환한다. 이러한 특징은 여러 문제점을 유발한다.
리퀘스트를 보낸 곳의 웹 서버가 원래 의도한 리스폰스를 보내야 하는 웹 서버인지를 확인할 수 없다.
리스폰스를 반환한 곳의 클라이언트가 원래 의도한 리퀘스트를 보낸 클라이언트인지를 확인할 수 없다.
통신하고 있는 상대가 접근이 허가된 상대인지를 확인할 수 없다.
어디에서 누가 리퀘스트 했는지 확인할 수 없다.
의미없는 리퀘스트도 수신한다. —> DoS 공격을 방지할 수 없다.
< 보완 방법 >
SSL
로 상대를 확인할 수 있다. SSL 은 상대를 확인하는 수단으로 증명서 를 제공하고 있다. 증명서는 신뢰할 수 있는 제 3 자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하며 신뢰할 수 있다는 사실을 증명한다. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다. 한 가지 이점을 더 꼽자면 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
- 완전성을 증명할 수 없기 때문에 변조가 가능하다.
자세히
여기서 완전성이란 정보의 정확성 을 의미한다. 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다라는 것을 보장할 수 없는 것이다. 리퀘스트나 리스폰스가 발신된 후에 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다. 이와 같이 공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-Middle)이라고 부른다.
< 보완 방법 >
MD5
, SHA-1
등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 확인할 수 있는 것은 아니다. 확실히 방지하기 위해서는 HTTPS
를 사용해야 한다. 왜냐하면 SSL 에는 인증이나 암호화, 그리고 다이제스트 기능을 제공하고 있기 때문이다.
참고
SSL의 장점
SSL은 데이터 보호를 위해 다음과 같은 기능들을 제공합니다.
암호화
: 전송하는 데이터를 암호화해서 중간에 누군가가 패킷을 가로채더라도 그 안의 내용을 해석하지 못하도록 하는 기능입니다.메시지 다이제스트(Message Digest)
: 메시지(데이터)의 해시값(다이제스트 값)을 계산하여 데이터와 함께 전송하는 방법입니다. 중간에 누군가가 패킷을 변조하더라도 다이제스트 값을 확인하면 데이터의 변조 사실을 확인할 수 있습니다. 데이터의 무결성을 보장해주는 방법입니다.디지털 증명서
: 디지털 증명서는 서버가 신뢰할 수 있는 서버인지 증명하는 파일입니다. 중간에 누군가가 접속 경로를 바꾸어 가짜 서버에 접속했을 때 확인할 수 있도록 하는 기능입니다.
HTTPS(Hypertext Transfer Protocol Secure)
HTTP에 암호화와 인증, 그리고 완전성 보호를 더한 것이 HTTPS>
HTTPS
는 하이퍼 텍스트 전송 프로토콜 보안의 약자입니다. 일반 HTTP 프로토콜의 문제점인 데이터가 쉽게 도난당할 수 있는 문제를 SSL
(보안 소켓 계층)을 사용함으로써 해결했습니다.
HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer)
or TLS(Transport Layer Security)
라는 프로토콜로 대체하는 것입니다. HTTP 는 원래 TCP 와 직접 통신했지만, HTTPS 에서 HTTP 는 SSL 과 통신하고 SSL 이 TCP 와 통신 하게 된다. 이에 관한 자세한 사항은 SSL 문서를 참고하자.
특징
SSL 을 사용한 HTTPS 는 암호화와 증명서, 데이터 무결성을 이용할 수 있게 됩니다.
일반적으로 HTTPS는 HTTP에 비해서 (매우 많이)느리다.
그 이유는 HTTPS 의 SSL 에서는 개인키(=대칭키) 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용하는데, 여기서 공개키 암호 방식은 개인키 암호방식보다 상당히 느리기 때문이다. 그래서 개인키를 공개키 암호화 방식으로 교환한 다음에 다음부터의 통신은 개인키 암호를 사용하는 방식을 사용한다.이것은 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다. 많은 웹 사이트들이 민감한 정보를 다루는 페이지(로그인 혹은 유저정보) 페이지를 HTTPS로 전송하고, 기타 페이지는 HTTP로 전송하는 방법을 사용한다. 하드웨어 SSL 가속기를 이용해서 암/복호화 성능을 높이는 방법을 사용하기도 한다.
이에 관한 자세한 사항은 SSL 문서를 참고하자.
HTTPS의 기본 TCP/IP 포트로 443번 포트를 사용한다.
HTTPS 장점
암호화: 교환되는 데이터를 암호화하여 침입자로부터 보호합니다. 즉, 사용자가 웹사이트를 탐색하는 동안 아무도 대화를 '엿들을' 수 없고 페이지에서 활동을 추적할 수 없으며 정보를 도용할 수 없습니다.
인증: 사용자가 의도된 웹사이트와 통신 중임을 입증합니다. 중간자 공격을 차단하고 사용자의 신뢰를 구축하게 되어 다른 비즈니스 이점으로 이어지게 됩니다.
데이터 무결성: 데이터가 전송되는 동안 의도적이든 그렇지 않든 모르는 사이에 데이터가 변경되거나 손상되는 일을 방지합니다.
HTTP 와 HTTPS 의 차이점
- 포트 : HTTP - 80, HTTPS - 443
- 암호화 : - HTTP 는 평문 통신이기 때문에 도청이 가능하다. 하지만 HTTPS는 SSL을 조합하여 전송하는 데이터를 암호화해서 중간에 누군가가 패킷을 가로채더라도 그 안의 내용을 해석하지 못하도록 하는 기능을 제공한다.
- 인증 : HTTP 에 의한 통신에는 접근이 허가된 상대인 지 확인할 수 없어 상대의 신뢰성을 보증할 수 없다. 반면 HTTPS 는 신뢰할 수 있는 제 3 자 기관에 의해 발행된 SSL 증명서로 서버나 클라이언트가 실재하며 신뢰할 수 있다는 사실을 증명할 수 있다.
- 데이터 무결성 : HTTP는 중간자 공격(Man-in-the-Middle)을 받아 통신 중 데이터가 변경되거나 손상될 수 있다. HTTPS 는 메시지 다이제스트(Message Digest) 기능으로 이것을 방지할 수 있다. 이것은 메시지(데이터)의 해시값(다이제스트 값)을 계산하여 데이터와 함께 전송하는 방법입니다. 중간에 누군가가 패킷을 변조하더라도 다이제스트 값을 확인하면 데이터의 변조 사실을 확인할 수 있습니다. 데이터의 무결성을 보장해주는 방법입니다.
- 하지만 HTTPS를 이용하면 암호화/복호화의 과정이 필요하기 때문에 HTTP보다 속도가 느리고 인증서를 발급하고 유지하기 위한 추가 비용이 발생합니다. 개인정보와 같은 민감한 데이터를 주고 받아야한다면 HTTPS를 이용해야 하지만, 단순한 정보 조회 등만을 처리하고 있다면 HTTP를 이용할 수 있습니다.
모든 웹 페이지에서 HTTPS를 사용해도 될까?
평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다.
하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.
Reference
https://www.crocus.co.kr/1387
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#http%EC%99%80-https
'CS > Network' 카테고리의 다른 글
REST,REST API, RESTful (0) | 2021.12.28 |
---|---|
OSI 7계층과 TCP/IP 4계층 (0) | 2021.12.28 |
HTTP 메소드 (0) | 2021.12.28 |
DNS (0) | 2021.12.28 |
쿠키와 세션 (0) | 2021.12.28 |