HTTP와 HTTPS는 웹에서 데이터를 전송하는 데 사용되는 두 가지 프로토콜이다. 이 두 프로토콜은 많은 면에서 유사하지만, 보안 측면에서 큰 차이가 있다.
1. HTTP (HyperText Transfer Protocol)
HTTP는 인터넷 상에서 데이터를 전송하는 프로토콜이다. 주로 웹 브라우저와 웹 서버 간의 데이터 통신을 관리하며, 텍스트, 이미지, 비디오와 같은 다양한 콘텐츠를 전달하는 데 사용된다.
특징
- 데이터 비암호화: HTTP로 전송되는 데이터는 암호화되지 않으며, 평문(plain text)으로 전송된다. 즉, 중간에서 누군가가 트래픽을 가로채면 쉽게 데이터를 읽을 수 있다.
- 기본적인 데이터 전송: HTTP는 기본적으로 데이터를 주고받는 간단한 프로토콜이다. 그러나 데이터의 무결성, 기밀성, 인증 등의 보안 요소는 제공하지 않는다.
- 포트 번호: HTTP는 기본적으로 포트 80을 사용한다.
문제점
- 보안 취약성: HTTP는 암호화되지 않은 상태로 데이터를 전송하기 때문에, 중간 공격자(man-in-the-middle attack)에게 쉽게 노출될 수 있다. 특히, 로그인 정보, 개인 정보, 결제 정보 등의 민감한 데이터는 보호되지 않는다.
- 데이터 무결성 보장 부족: 데이터가 전송되는 동안 중간에 변조될 수 있는 가능성도 있으며, 이를 탐지할 방법이 없다.
2. HTTPS (HyperText Transfer Protocol Secure)
HTTPS는 HTTP에 보안 계층을 추가한 프로토콜이다. HTTPS는 HTTP와 동일한 방식으로 데이터를 전송하지만, 데이터 전송 과정에서 보안을 강화하기 위해 SSL/TLS 암호화 프로토콜을 사용한다.
특징
- 데이터 암호화: HTTPS는 데이터를 암호화하여 전송한다. 이를 통해, 클라이언트와 서버 간의 통신이 도청되더라도 데이터를 읽을 수 없도록 보호한다. SSL/TLS 암호화 방식 덕분에 데이터는 안전하게 전송된다.
- 기밀성: 클라이언트와 서버 간의 통신은 암호화되어 있으며, 이를 통해 통신 내용을 도청하거나 변조할 수 없다.
- 데이터 무결성: HTTPS는 데이터를 암호화할 뿐만 아니라, 데이터가 전송 중에 변조되지 않도록 보장한다. 만약 중간에서 데이터가 변경되면, 이를 탐지할 수 있다.
- 서버 인증: HTTPS는 클라이언트가 통신하려는 서버가 진짜 서버인지 확인할 수 있도록 서버의 신원을 인증하는 SSL/TLS 인증서를 사용한다.
- 포트 번호: HTTPS는 포트 443을 사용한다.
SSL/TLS (Secure Sockets Layer / Transport Layer Security)
HTTPS에서 사용되는 암호화 프로토콜은 SSL(현재는 사용되지 않음) 또는 TLS이다. TLS는 SSL의 후속 프로토콜로, 더 안전한 암호화와 보안을 제공한다.
- SSL/TLS 인증서: HTTPS를 사용하려면 웹 서버는 SSL/TLS 인증서를 발급받아야 한다. 인증서는 도메인의 신원을 인증하는 역할을 하며, 클라이언트가 해당 서버가 진짜인지 확인하는 데 사용된다.
- 암호화 키: HTTPS는 대칭 키 암호화 방식과 비대칭 키 암호화 방식을 모두 사용한다. 비대칭 키는 초기 연결 과정에서 사용되고, 이후 통신은 대칭 키 암호화로 처리되어 성능을 최적화한다.
3. HTTP와 HTTPS의 주요 차이점
항목 | HTTP | HTTPS |
보안성 | 암호화되지 않음. 데이터를 평문으로 전송. | SSL/TLS를 사용하여 암호화된 데이터 전송. |
기밀성 | 없음. 도청이 가능함. | 통신이 암호화되어 도청 불가능. |
무결성 | 데이터 변조를 탐지할 수 없음. | 데이터가 변조되면 이를 탐지할 수 있음. |
서버 인증 | 서버의 신원 확인 불가. | SSL/TLS 인증서를 통해 서버의 신원을 확인 가능. |
기본 포트 | 포트 80 | 포트 443 |
속도 | 더 빠름 (암호화가 없으므로). | 암호화 과정 때문에 약간 느릴 수 있음. |
사용 사례 | 보안이 덜 중요한 페이지 (예: 일반 정보 제공 사이트) | 보안이 중요한 페이지 (예: 로그인, 결제 페이지) |
4. HTTPS의 작동 방식
HTTPS는 SSL/TLS를 기반으로 안전한 통신을 설정하는 여러 단계를 거친다.
- 클라이언트 요청: 클라이언트(브라우저)가 HTTPS 요청을 보낸다. 이때 서버는 자신의 SSL/TLS 인증서를 클라이언트에게 전달한다.
- 서버 인증서 확인: 클라이언트는 서버의 인증서가 신뢰할 수 있는 CA(Certificate Authority, 인증 기관)에서 발급된 것인지, 인증서가 만료되지 않았는지, 해당 서버의 도메인과 일치하는지 확인한다.
- 세션 키 협상: 인증서가 유효하다고 확인되면, 클라이언트와 서버는 세션 키(대칭 키)를 협상하여 생성한다. 이 세션 키를 사용하여 클라이언트와 서버 간의 데이터를 암호화한다.
- 암호화된 데이터 전송: 이후 클라이언트와 서버는 암호화된 데이터를 주고받으며 안전하게 통신한다.
이 과정에서 암호화된 연결은 데이터 도청, 중간자 공격, 데이터 변조 등의 위험을 방지한다.
5. HTTP와 HTTPS의 장단점
HTTP의 장점
- 빠른 속도: 암호화 과정이 없기 때문에 HTTPS에 비해 속도가 빠를 수 있다.
- 단순함: 보안이나 인증 과정이 필요하지 않아 설정이 간단하고 리소스 소모가 적다.
HTTP의 단점
- 보안 취약성: 암호화되지 않은 상태로 데이터를 전송하기 때문에 도청, 중간자 공격(MITM), 데이터 변조 등의 보안 위협에 매우 취약하다.
- 인증되지 않음: 서버의 신원을 보장할 수 없기 때문에 사용자가 악성 서버에 속을 수 있다.
HTTPS의 장점
- 보안성: 데이터를 암호화하여 안전하게 전송하므로, 도청이나 데이터 변조의 위험을 줄일 수 있다.
- 신뢰성: 서버의 신원을 인증할 수 있으므로, 사용자는 안전한 서버와 통신하고 있음을 보장받을 수 있다.
- SEO 및 사용자 신뢰: 구글과 같은 검색 엔진은 HTTPS를 사용하는 사이트에 더 높은 SEO 점수를 부여하며, 사용자도 "안전하지 않음" 경고가 없는 HTTPS 사이트에 더 큰 신뢰를 가진다.
HTTPS의 단점
- 성능: 암호화 과정에서 추가적인 CPU와 메모리 리소스를 사용하게 되어 HTTP보다 약간의 성능 저하가 발생할 수 있다.
- 설치와 관리: SSL/TLS 인증서를 설치하고 주기적으로 갱신하는 과정이 필요하다. 비용이 발생할 수 있고, 적절히 관리되지 않으면 보안 문제가 발생할 수 있다.
6. HTTP와 HTTPS 선택 기준
대부분의 경우, HTTPS를 사용하는 것이 권장된다. 특히, 아래와 같은 경우에는 HTTPS가 필수적이다.
- 로그인 및 인증 과정: 사용자의 로그인 정보나 인증 토큰과 같은 민감한 데이터는 반드시 HTTPS로 보호해야 한다.
- 개인 정보 보호: 사용자의 개인 정보(이름, 주소, 결제 정보 등)를 처리하는 모든 웹사이트는 HTTPS를 사용하여 데이터를 안전하게 보호해야 한다.
- SEO 최적화: 구글과 같은 검색 엔진은 HTTPS를 사용하는 웹사이트를 선호하며, HTTPS는 SEO 점수에도 긍정적인 영향을 미친다.
- 사용자 신뢰: 사용자는 웹사이트의 주소창에서 "자물쇠" 아이콘을 보고 해당 사이트가 안전하다는 것을 인식한다. HTTP 사이트는 "안전하지 않음" 경고가 표시될 수 있다.
반면, 보안이 필요하지 않은 매우 단순한 콘텐츠 제공 페이지나 내부에서만 사용하는 네트워크에서는 HTTP를 사용할 수 있다. 하지만 현대 웹 환경에서는 대부분의 웹사이트가 HTTPS를 기본적으로 채택하고 있다.
- HTTP는 데이터를 암호화하지 않고 전송하는 프로토콜로, 보안에 취약하지만 단순하고 빠른 통신을 제공한다.
- HTTPS는 SSL/TLS 암호화를 통해 보안을 강화한 HTTP로, 데이터의 기밀성, 무결성, 인증을 제공한다. 성능 저하가 약간 있을 수 있지만, 보안과 신뢰성이 중요한 현대 웹에서는 사실상 표준이 되었다.
728x90
'Backend study > Backend theory' 카테고리의 다른 글
경쟁 조건(Race Condition)과 교착 상태(Deadlock) (0) | 2024.09.17 |
---|---|
프로세스(process)와 스레드(thread) (2) | 2024.09.16 |
VPN, Port Forwarding, DNS, DDNS (0) | 2024.09.14 |
HTTP Content-Type (1) | 2024.09.13 |
비동기(Asynchronous)와 동기(Synchronous) (0) | 2024.09.11 |