> For the complete documentation index, see [llms.txt](https://k-developer.gitbook.io/dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://k-developer.gitbook.io/dev/http/http-network-1/7.-https/7.1-http.md).

# 7.1 HTTP의 약점

* 평문 통신이기 때문에 도청가능
* 통신 상대를 확인하지 않기 때문에 위장 가능
* 완전성을 증명할 수 없기 때문에 변조 가능

### 7.1.1 평문이기 때문에 도청가능

* TCP/IP는 도청 가능한 네트워크

TCP/IP 구조의 통신 내용은 전부 통신 경로중에 엿볼 수 있다. 같은 세그먼트 통신을 도청하는 것은 어려운 일이 아니다. 패킷을 수집하는 것만으로 도청할 수 있다.패킷 캡쳐.

* 암호화

1. 통신 암호화

SSL이나 TLS이라는 다른 프로토콜 조합으로 HTTP 통신 내용을 암호화 한다. SSL을 이용해 안전한 통신로를 확립하고 그 통신로를 사용해 HTTP 통신을 한다.->HTTPS

```
2. 콘텐츠 암호화
```

통신하고 있는 콘첸츠의 내용 자체를 암호화해 버리는 방식이다.HTTP를 사용해서 운반하는 내용을 암호화 한다.HTTP메세지 콘텐츠만 암호화 한다. 서버에서는 복호화.

### 7.1.2 통신상대를 확인하지 않아 위장 가능하다.

리퀘스트, 리스폰스에서 통신상대를 확인하지 않는다.

* 누구나 리퀘스트 할 수 있다.

HTTP통신에서 상대가 누구인지 확인하지 않는다. 또한, 리퀘스트가 오면 상대가 누구든지 무언가의 리스폰스를 반환한다.(IP,PORT 제한이 없는경우)

1. 리퀘스트를 보낸 곳의 웹 서버가 원래 의도한 리스폰스를 보내야 하는 웹서버인지 확인할 수 없다.
2. 리스폰스를 반환한 곳의 클라이언트가 원래 의도한 리퀘스트를 보낸 클라이언트인지 확인할 수 없다.
3. 통신하고 있는 상대가 접근이 허가된 상대인지 확인할 수 없다.중요한 정보를 가진 웹서버에서는 특정 상대만 통신을 허가하고 싶을 때가 있다.
4. 누가 리퀘스트 했는지 확인할 수 없다.
5. 의미없는 리퀘스트라도 수신하게 된다. Dos 공격을 방지할 수가 없다.

* 상대를 확인하는 증명서

HTTP에서는 확인할 수 없지만, SSL로 상대를 확인할 수 있다. SSL은 암호화, 상대확인 수단으로 증명서를 제공하고 있다. 증명서는 신뢰할 수 있는 제3자 기관에 의해 발행된다. 서버나 클라이언트가 실재하는 사실을 증명한다. 통신 상대의 서버나 클라이언트가 가진 증명서를 확인함으로써 내가 통신하고자 하는 상대인지 판단할 수 있다.

### 7.1.3 완전성을 증명할 수 없어 변조 가능하다

완전성 : 정보의 정확성\
완전성을 증명할 수 없다는 것은 정보가 정확한지 아닌지 확인할 수 없음을 말한다.

* 수신한 내용이 다를지도 모른다.

HTTP가 완전성을 증명할 수 없다는것은 리퀘스트, 리스폰스가 발신된 후 상대가 수신할 때까지의 사이에 변조가 되더라도 이 사실을 알 수 없다는 것이다.

즉 어떤 웹사이트에서 콘텐츠를 다운받은것이 서버상에 있는 파일이 정말로 맞는지 알 수 가 없다는것이다. 이같이 공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조하는 공격을 중간자 공격이라고 한다.

* 변조를 방지 하려면?

MD5나 SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 있다.확실히 방지 하는법은 HTTPS를 사용해야한다. SSL은 인증이나 암호화, 다이제스트 기능을 제공하고 있다.
