![[네트워크] HTTP와 HTTPS](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7PPxT%2FbtsIrNbNGaC%2Fb5EBBT7xUwuKGQKa3bqnyK%2Fimg.png)
[네트워크] HTTP와 HTTPSlegacy/Network2024. 7. 7. 21:08
Table of Contents
1. HTTP
1-1. HTTP란?
HTTP란 Hyper Text Transfer Protocol의 약자로써, 서버/클라이언트 모델에서 데이터를 주고받기 위한 프로토콜이다. HTTP는 80 포트를 사용하며 클라이언트로부터 요청이 오기를 기다린다.
1-2. HTTP 구조
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
- 요청 라인(Request Line)
- GET → HTTP 메서드
- /index.html → 요청하는 자원의 URL
- HTTP/1.1 → HTTP 프로토콜 버전
- 요청 헤더 (Request Headers)
- Host → 요청 도메인
- User-Agent → 브라우저에 대한 정보
- Accept → 클라이언트가 수신할 수 있는 Content 타입
- Accept-Language → 클라이언트가 지원하는 인코딩 유형
- 바디 (Body)
- 예시의 경우 GET 요청이므로 바디를 포함하지 않는다.
2. HTTPS
2-1. HTTPS란?
HTTPS란 기존의 HTTP 프로토콜에 Secure 기능이 추가된 프로토콜이다. HTTP는 80포트를 사용하고 HTTPS는 443 포트를 사용한다.
HTTP 통신은 요청-응답 과정에서 데이터를 암호화하지 않는다. 이는 네트워크 상에서 중간에 제 3자가 데이터를 볼 수 있는 위험성을 갖고 있다. 따라서 HTTPS 통신을 통해 중간에 데이터를 볼 수 없도록 암호화해야 한다.
2-2. 데이터 암호화
HTTPS는 데이터를 보호하기 위해 SSL(Secure Sockets Layer) 또는 TLS(Transfer Layer Secure) 프로토콜을 사용한다. HTTPS의 암호화 과정에는 공개키와 비밀키가 둘 다 사용된다.
- 대칭키 암호화
- 데이터 암호화 및 복호화 시에 같은 키를 사용한다.
- A라는 키로 암호화하였다면 이를 복호화하기 위해서는 A키가 필요하다.
- 암호화 및 복호화를 동일한 키로 수행하기 때문에 속도가 빠르다.
- 동일한 키로 암호화 및 복호화를 수행하므로 키가 노출되어서는 안 된다.
- 데이터 암호화 및 복호화 시에 같은 키를 사용한다.
- 비대칭키 암호화
- 데이터를 암호화 및 복호화할 때, 서로 다른 키를 사용한다.
- 데이터를 암호화할 때는 공개키를 사용하고 복화화 시에는 비밀키가 사용된다.
- 비밀키를 토대로 공개키가 생성되기 때문에 클라이언트가 공개키로 암호화한 데이터를 서버에서는 비밀키를 사용하여 해독할 수 있다.
- 암호화 및 복호화를 서로 다른 키로 수행하기 때문에 속도가 느리다.
- 공개키를 탈취했다고 하더라도 복호화하기 위한 비밀키가 없기 때문에 안전하다.
참고로 HTTPS를 사용하지 않으면 안전하지 않는 파일이라고 뜬다.