
HTTP (HyperText Transfer Protocol)
- HTML과 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 모든 데이터의 기초이며, 클라이언트-서버 간 프로토콜이다.
- 80 포트를 사용하며 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.
문제점
- 평문 통신이라 도청 가능
- 통신 상대를 확인하지 않기 때문에 위장이 가능
- 완전성을 증명할 수 없기 때문에 변조가 가능
TCP/IP
- 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로도 도청이 가능하다.
- 평문으로 통신할 경우 메세지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.
- 보완
- 통신 자체를 암호화 SSL(Secure Socket Layer) , TLS(Transport Layer Security) 라는 다른 프로토콜을 조합함으로써 HTTP의 통신내용을 암호화 할 수 있다. SSL을 조합한 HTTP를 HTTPS(HTTP Secrure) 또는 HTTP over SSL 이라고 부른다.
- 콘텐츠를 암호화한다. 즉, HTTP를 사용해서 운반하는 내용인 HTTP 메세지에 포함되는 콘텐츠만 암호화 하는것이다. 암호화해서 전송하면 받은 측에서는 그 암호를 해독하여 출력하는 처리가 필요하다.
위장
- HTTP에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에 누구든지 리퀘스트를 보낼 수 있다. IP주소나 포트 등에서 그 웹서버에 엑세스 제한이 없는 경우 리퀘스트가 오면 상대가 누구든지 무언가의 리스폰스를 반환한다.
- 문제
- 리퀘스트를 보낸 곳의 웹 서버가 원래 의도한 리스폰스를 보내야 하는 웹 서버인지를 확인할 수 없다.
- 리스폰스를 반환한 곳이 클라이언트가 원래 의도한 리퀘스트를 보낸 클레이언트인지를 확인할 수 없다.
- 통신하고 있는 상대가 접근이 허가된 상대인지 확인할 수 없다.
- 어디에서 누가 리퀘스트 했는지 확인할 수 없다.
- 의미없는 리퀘스트도 수신한다. -> Dos공격
- 보완
- SSL로 상대를 확인할 수 있다. SSL은 상대를 확인하는 수단으로 증명서를 제공한다. 이 증명서는 신뢰할 수 있게 제 3자가 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다.
- SSL 인증서로 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인정보 누설 등의 위험성이 줄게 된다. 클라이언트 또한 이 증명서로 본인 확인을 하고 웹사이트 인증에서도 사용할 수 있다.
변조
- 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다라는 걸 보장할 수 없다. 리퀘스트나 리스폰스가 발신된 후에 상대가 수신하는 사이에 누군가에의해 변조되더라도 이 사실을 알 수가 없다. 이와 같이 공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조해 공격하는 것을 중간자 공격 (Man-in-the-Middle) 이라고 한다.
- 보완
- MD5, SHA-1등의 해시 값을 확인하는 방법
- 파일의 디지털 서명을 확인하는 방법
- 하지만 위의 둘을 확실하게 확인할 수 있는 방법은 아니다.
- 이를 확실히 방지하기 위해서는 HTTPS를 사용해야 한다. SSL에는 인증이나 암호화, 그리고 다이제스트 기능을 제공한다.
HTTPS
- HTTP에 암호화 인증, 그리고 완전성 보호를 더한 HTTPS이다.
- SSL의 껍질을 덮어쓴 HTTP라고 할 수 있다.즉, HTTPS는 새로운 애플리케이션 계층의 프로토콜이다.
- HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 프로토콜로 대체하는 것 뿐이다.
- HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL 과 통신하고 SSL이 TCP와 통신하게 된다.SSL을 사용한 HTTPS는 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.
- HTTPS의 SSL 에서는 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다.
- 공통키를 공개키 암호화 방식으로 교환한 다음에 다음부터의 통신은 공통키 암호를 사용하는 방식이다.
과정 정리
- 도메인에 연결된 웹서버에서 인증서 정보화 공개키 정보를 담아 클라이언트에게 전달하고 전달받은 클라이언트는 브라우저 내부적으로 인증기관정보 및 도메인 정보를 가지고 신뢰할수 있는 도메인 유무를 확인후 랜덤으로 생성한 대칭키를 클라이언트에게 전달한다.
- 클라이언트는 전달받은 대칭키로 데이터 및 url을 암호화 하고 대칭키를 처음에 서버로부터 받은 공개키로 또 암호화를해서 서버로 데이터를 전송한다. 그러면 서버는 받은 대칭키를 개인키로 복호화하고 복호화된 대칭키로 데이터를 다시 복호화한다. 서버에서 데이터 전송시 데이터를 개인키로 암호화후 전송한뒤 클라이언트는 공개키로 복호화 한다.
- 대칭키(공통키): 정보를 암호화 복호화할 때 사용하는 키가 같은경우
- 비대칭키(개인키,공개키): 정보를 암호화 복호화 할 때 사용하는 키가 다른 경우
'Computer Science' 카테고리의 다른 글
| [CS] 양방향 암호화 (0) | 2025.04.11 |
|---|---|
| [CS] 단방향 암호화 (0) | 2025.04.11 |
| [CS] Serverless (0) | 2025.03.16 |
| [CS] Content Delivery Network (0) | 2025.03.16 |
| [CS] Session vs Token (0) | 2024.11.28 |