HTTP(Hypertext Transfer Protocol)
서로 다른 시스템 통신을 주고받게 해주는 기초적인 프로토콜이다. 인터넷 초기에 모든 웹 사이트에서 기본적으로 사용되었던 프로토콜이기도 하다.
HTTP 문제점
- HTTP는 평문 통신이기에 도청이 가능하다.
- 통신 상대를 확인하지 않기 때문에 위장이 가능하다
- 완전성을 증명할 수 없기 때문에 변조가 가능하다.
TCP/IP는 도청 가능한 네트워크
TCP/IP는 패킷을 수집하는 것만으로 도청이 가능하다. 평문으로 통신하면 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.
- 통신 자체를 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)라는 다른 프로토콜을 조홥하여 HTTP 통신 내용을 암호화할 수 있다. SSL을 조합한 HTTP를 HTTPS 라고 부른다.
- HTTP메시지에 포함되는 콘텐츠만 암호화한다. 암호화해서 전송하면 받은 수신측은 암호를 해독하여 출력 처리한다.
통신 상대를 확인을 못하기에 위장이 가능
HTTP에 의한 통신은 상대가 누구인지 모르기 때문에 누구든지 리퀘스트 보낼 수 있다. 서버에서 엑세스 제한이 없는 경우 리퀘스트가 오면 상대가 누구든지 리스폰스를 반환한다. 이럴 경우 여러 문제점을 유발한다.
- 송신측의 리퀘스트를 받은 웹 서버가 의도한 리스폰스를 보내야 하는 웹 서버인지 확인할 수 없다.
- 리스폰스를 받은 클라이언트가 원래 의도한 리퀘스트를 보낸 클라이언트인지 확인할 수 없다.
- 통신하고 있는 상대가 접근이 허가된 상대인지 확인할 수 없다.
- 어디에서 누가 리퀘스트를 보냈는지 확인할 수 없다.
- 의미없는 리퀘스트도 수신한다.(DoS 공격)
- 보안
SSL로 상대를 확인할 수 있다. 상대를 확인할 수단으로 증명서를 제공한다. 증명서는 신뢰할 수 있는 제 3자 기관에 의해 발행되는 것이기에 서버나 클라이언트가 실재하는 사실을 증명한다. 증명서를 통해 내가 통신하고자 하는 서버임을 알고 이용자는 개인 정보 누설 등의 위험성이 줄어든다. 그리고 클라이언트는 증명서로 본인 확인을 하고 웹 사이트 인증에도 이용할 수 있다.
완전성을 증명할 수 없기에 변조 가능
완전성이란 정보의 정확성을 의미한다. HTTP는 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다는 것을 보장할 수 없다. 누군가에 의해 변조되더라도 이 사실을 알 수 없다.
- 보안
MD5, SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 확인할 수 있는 것은 아니다. SSL은 인증이나 암호화 그리고 다이제스트 기능을 제공하고 있다.
HTTPS
HTTP에 암호화와 인증, 완전성 보호를 더했다.
SSL의 껍질을 덮어쓴 HTTP 이다. 통신하는 소켓 부분에 SSL 또는 TLS라는 프로토콜로 대체하는 것 뿐이다. HTTPS는 SSL과 통신하고 SSL은 TCP와 통신하게 된다. 여기서 암호화와 증명서, 안전성 보호를 이용한다.
HTTPS는 HTTP의 평문 통신에 비해 암호화 통신은 CPU나 메모리 등 리소스를 더 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 리퀘스트의 수가 줄어든다.
하지만 하드웨어의 발달로 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않는다. 새로운 표준인 HTTP 2.0을 이용한다면 오히려 HTTPS가 더 빠르다. 따라서 HTTPS에 의한 암호화 통신을 사용하는 방식은 현재 모든 웹 페이지에서 적용하는 방향으로 가고 있다.