💡 HTTP(Hypertext Transfer Protocol) 프로토콜이란?
- 웹에서 데이터를 주고받는 서버-클라이언트 모델의 프로토콜
- HTTP는 일반적으로 TCP/IP 위에서 동작
- 기본적으로 클라이언트가 요청(Request)을 보내고 서버가 응답(Response)을 반환하는 방식으로 동작
- 클라이언트-서버 모델에 기반을 둔 상태 없는(stateless) 프로토콜
✔️ 이전 요청과 다음 요청 간에 상태 정보가 유지되지 않는다는 것을 의미
- 먼저 사용자가 웹사이트를 방문하면 브라우저가 웹서버로 리소스를 요청한다.
- 요청을 받은 웹서버는 HTML, CSS와 같은 리소스를 응답으로 돌려준다.
- 클라이언트의 요청과 서버의 응답 사이에는 여러 프록시 서버가 있다.
- 프록시 서버는 캐시를 보관하거나 보안을 위해 서버의 IP 주소를 숨기는 등 다양한 역할을 한다.
- 이 모든 통신은 안전하기 이뤄지기 위해 TCP(Transmission Control Protocol) 연결을 사용한다.
💡 HTTP 요청
- 브라우저는 아래와 같은 HTTP 요청을 서버로 보낸다.
- 첫 줄에는 HTTP 요청 메서드, URL 경로, HTTP 프로토콜 버전 정보가 있다.
- 두 번째 줄부터 모두 HTTP 요청의 헤더이다.
- key:value 쌍으로 이뤄져 있다.
- 헤더는 웹사이트 도메인의 호스트, 언어, 사용자의 브라우저 등 서버가 필요한 정보를 전달한다.
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept-Language: ko-KR
💡 HTTP 응답
- 요청에 문제가 없다면 서버는 아래와 같은 응답을 돌려준다.
- 첫 줄에는 HTTP 프로토콜 버전 정보와 HTTP 상태 코드가 있다.
- 둘째 줄부터 보이는 key:value 쌍은 역시 모두 헤더이다.
- 응답의 헤더는 브라우저가 필요한 정보를 전달한다.
- 마지막으로 응답의 Body는 브라우저가 요청한 데이터다. 아래 예시에서는 HTML 데이터를 돌려주고 있다.
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2023 14:28:02 GMT
Server: Apache
Content-Type: text/html
<html>
...
</html>
💡 HTTP와 HTTPS의 차이점
🔍 HTTP
- HTTP 통신에서 브라우저와 서버는 데이터를 일반 텍스트로 교환한다.
- 기본 포트번호는 80이다.
- HTTP는 데이터를 암호화하지 않고 전송하기 때문에 제3자가 데이터를 가로채고 읽을 수 있다.
- 보안을 강화하기 위해 HTTP는 HTTPS(Hypertext Transfer Protocol Secure)로 확장됐다.
🔍 HTTPS
- HTTPS는 이름에서도 알 수 있듯이 HTTP의 더 안전한 버전이다.
- 기본 포트번호는 443이다.
- HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 안전하고 암호화된 연결을 생성한다.
- HTTPS는 모든 요청 및 응답을 SSL(Secure Socket Layer) 및 TLS(Transport Layer Security) 프로토콜에 따라 암호화한다.
- 그래서 HTTPS를 사용하면 카드 정보나 비밀번호와 같은 민감한 정보를 보호할 수 있다.
💡 TLS(Transport Layer Security)
- 온라인 네트워크에서 데이터를 안전하게 주고받기 위한 암호화 프로토콜
- 통신 데이터를 TLS 프로토콜을 따라 암호화하면 누군가 데이터를 가로채도 복호화할 수 없기 때문에 악성 공격에서 데이터를 보호할 수 있다.
- TLS가 적용된 HTTP는 HTTPS라고 불린다.
- HTTP 뒤에 붙은 S는 보안(Security)를 뜻한다.
- TLS가 적용되지 않은 HTTP 데이터는 평문으로 통신되기 때문에 위험하다.
🔍 TLS 와 SSL 차이
- SSL(Secure Sockets Layer)은 TLS와 함께 사용되는 용어이다.
- SSL에는 여러 보안 취약점이 있었기 때문에 사용이 중단되었고, 더 안전한 TLS 프로토콜로 대체되었다.
- TLS가 아직 생소해서 지금도 널리 SSL이라는 용어가 사용되지만, 실제로는 TLS를 사용하는 게 더 일반적이다.
- 최신 웹 브라우저는 대부분 SSL을 지원하지 않고, 지원하더라도 사용 환경이 저하될 수 있는 위험이 있다.
🔍 TLS 보안
⭐️ TLS는 다음 세 가지 방법으로 통신 데이터를 보호한다.
- 인증: 통신하고 있는 서버를 신뢰할 수 있는지 알려준다. CA(Certification Authority)에서 발급받는 인증서로 상대 서버의 서비스 정보, 공개키, 지문, 디지털 서명 등 다양한 정보를 확인할 수 있다.
- 암호화: 대칭 및 비대칭 암호화 조합을 사용해서 안전하게 데이터를 보호한다. 통신을 시작할 때 비대칭키로 안전하게 대칭키를 공유하고, 실제로 통신 과정에서는 대칭키로 데이터를 암호화 및 복호화한다.
- 무결성: 통신 과정에서 데이터가 손실되거나 변조되는 것을 방지한다.