HTTP 에도 약점이 있는데, 주로 다음과 같은 약점을 가지고 있다.
- 평문 통신이기 때문에 도청 가능
- 통신 상대를 확인하지 않기 때문에 위장 가능
- 완전성을 증명할 수 없기 때문에 변조 가능
이 약점은 HTTP 만이 아닌, 다른 암호화하지 않은 프로토콜에도 공통되는 문제이다. 또 특정 웹 서버나 특정 웹 클라이언트의 구현상의 약점, JAVA 나 PHP 로 구축한 웹 어플리케이션 취약성 등이 있다.
암호화
도청을 피하기 위해 가장 보급되어 있는 기술은 암호화 이다. 암호화는 몇 가지 대상이 있다.
1) 통신 암호화
HTTP 에는 암호화 구조는 없지만 SSL (Secure Socket Layer) 나 TLS (Transfer Layer Security) 라는 다른 프로토콜을 조합함으로써 HTTP 통신 내용을 암호화 할 수 있다.
SSL 등을 이용해 안전한 통신로를 확립하고 나서 그 통신로를 이용해 HTTP 통신을 하는 것을 HTTPS(HTTP Secure) 라고 부른다.
2) 컨텐츠 암호화
또 다른 암호화의 종류는 통신하고 있는 컨텐츠의 내용 자체를 암호화 해 버리는 방법이다. HTTP 에 암호화를 하는 기능은 없기 때문에, HTTP 를 사용해서 운반하는 내용을 암호화 한다.
증명서
HTTP 를 사용한 리퀘스트나 리스폰스에서는 통신 상대를 확인하지 않는다. 리퀘스트를 보낸 서버가 정말로 URI 에서 지정된 호스트인지 아닌지, 리스폰스를 반환한 클라이언트가 정말로 리퀘스트를 출력한 클라이언트 인지 아닌지를 모른다는 것이다.
HTTP 에서는 통신 상대를 확인할 수 없지만 SSL 로 상대를 확인할 수 있다. SSL 은 암호화 뿐만 아니라 상대를 확인하는 수단으로 증명서를 제공하고 있다. 증명서는 신뢰할 수 있는 제3자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다.
통신 상대의 서버나 클라이언트가 가진 증명서를 확인함으로써 통신 상대가 내가 통신하고자 하는 상대인지 아닌지를 판단할 수 있다.
해시 / 디지털 서명
완전성이란 정보의 정확성을 의미하는데, 그것을 증명할 수 없다는 것은 정보가 정확한지 아닌지를 확인할 수 없음을 의미한다.
HTTP 가 완전성을 증명할 수 없다는 뜻은 만약 리퀘스트나 리스폰스가 발신된 후에 상대가 수신할 때까지의 사이에 변조되었다고 하더라도 이 사실을 알 수 없다는 뜻이다. 즉, 발신된 리퀘스트나 리스폰스와 수신한 리퀘스트나 리스폰스가 같은지 아닌지를 확인할 수 없다는 의미이다.
이와 같이 공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조하는 공격을 중간자 공격 (Man-in-the-middle) 공격이라고 한다.
HTTP 를 사용해서 완전성을 확인하기 위해 자주 사용되고 있는 방법은 MD5 나 SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이다.
그러나 이와 같은 방법으로도 확실하게 확인할 수 있는 것은 아니다. 만약 MD5 나 디지털 서명 또한 적절하게 수정되어 있다고 한다면 유저로서는 확인할 방법이 없게 된다. 따라서 확실한 방지를 위해서는 HTTPS 를 사용할 필요가 있다. HTTP 만으로는 완전성을 보증하는 것이 어렵기 때문에 다른 프로토콜을 조합함으로써 실현하고 있다.
'Stg' 카테고리의 다른 글
블록체인 (blockchain) (0) | 2024.03.13 |
---|---|
HTTPS (0) | 2023.04.22 |
HTTP 헤더 (0) | 2023.04.14 |
HTTP와 연계하는 웹 서버 (0) | 2023.04.12 |
HTTP 상태코드 (0) | 2023.04.11 |
댓글