HTTP와 HTTPS의 차이점은 무엇인가?
대표적인 기술면접 질문 중 하나로 간략하게 대답하자면,
HTTP는 웹 브라우저와 서버 간에 데이터를 주고 받는 프로토콜로 데이터를 암호화하지 않고,
HTTPS는 HTTP에 SSL/TLS를 추가하여 데이터 전송을 암호화하고 데이터의 기밀성과 무결성을 보장한다.
특징 | HTTP | HTTPS |
보안 | 암호화 없음 (평문 전송) | 암호화 적용 (SSL/TLS) |
신뢰성 | 낮음 | 높음 (인증서 필요) |
속도 | 빠름 | 초기 연결을 느리지만 최적화 가능 |
포트 | 80 | 443 |
사용 사례 | 일반적인 웹 사이트, 테스트 환경 | 금융, 쇼핑몰, 로그인 시스템 등 보안이 중요한 서비스 |
"POST 요청하면 안전한거 아니에요?"
GET 요청은 데이터를 쿼리 스트링(Query String)으로 전달하기 때문에, 브라우저 주소창이나 로그에 남을 수 있다. 따라서 아래와 같이 요청하면 네트워크 로그나 브라우저 히스토리에 아이디와 비밀번호가 남아버리는 문제가 발생한다.
GET /login?username=admin&password=1234 HTTP/1.1
POST 요청은 데이터를 Body 에 담아서 보내므로 URL 에 직접 포함되지 않기 때문에, 노출되는 위험은 줄어든다.
POST /login HTTP/1.1
Content-Type: application/json
{
"username": "admin",
"password": "1234"
}
하지만 POST 도 안전하지 않다!
1. 평문(Plain Text)으로 전송되면 노출 위험
- HTTP를 사용할 경우, POST 요청의 Body도 암호화되지 않고 그대로 전송된다. 즉, 네트워크에서 패킷을 가로채면 데이터를 확인할 수 있다.
- 따라서, HTTPS를 사용하지 않으면 POST 도 안전하지 않다는 점을 기억해야 한다.
2. 네트워크 패킷 스니핑(Packet Sniffing) 위험
- 중간자 공격(MITM, Man-in-the-Middle Attack)으로 POST 데이터도 가로채질 수 있다.
- HTTPS를 사용하면 TLS 암호화를 통해 데이터가 보호되지만, HTTP를 사용하면 위험하다.
3. CSRF(Cross-Site Request Forgery) 공격 가능성
- POST 요청은 보안이 강하다고 생각되지만, CSRF 공격이 발생하면 사용자의 의도와 무관하게 요청이 실행될 수도 있다.
- 예) 악성 사이트에서 사용자의 인증 정보를 활용해 특정 사이트에 POST 요청을 보내는 경우
- 이를 방지하려면 CSRF 토큰을 사용해야 한다.
4. 브라우저 캐싱 위험
- GET 요청은 브라우저에 의해 캐싱될 수 있어 민감한 정보가 저장될 위험이 있지만, 일부 설정이 잘못되면 POST 요청도 캐싱될 가능성이 있다.
- 따라서 `Cache-Control: no-store` 헤더를 추가해 보호해야 한다.
HTTPS를 반드시 사용해야 하는 이유
1. 데이터 암호화
🚫 문제점 (HTTP 사용 시)
- HTTP는 데이터를 평문(Plain Text)으로 전송하기 때문에, 네트워크에서 패킷을 가로채면 쉽게 내용을 볼 수 있다.
- 로그인 정보, 카드 번호, 개인정보 등이 그대로 노출될 위험이 크다.
✅ HTTPS 사용 시
- TLS를 통해 요청과 응답의 모든 데이터를 암호화하여 보호한다.
- 제3자가 데이터를 가로채더라도 암호화되어 있어 해독할 수 없다.
📌 즉, HTTPS는 네트워크를 통한 데이터 유출을 막아준다.
2. 데이터 무결성
🚫 문제점 (HTTP 사용 시)
- HTTP를 사용하면 중간자 공격(MITM)이 가능하며, 공격자가 데이터 내용을 변조할 수도 있다.
- 예를 들어, 공격자가 웹사이트에서 다운로드하는 파일을 악성 코드가 포함된 파일로 바꿔치기할 수 있다.
✅ HTTPS 사용 시
- TLS 암호화를 적용하면 데이터 위/변조를 방지할 수 있다.
- 클라이언트와 서버가 주고받은 데이터가 신뢰할 수 있는 상태임을 보장한다.
📌 즉, HTTPS는 데이터가 변조되지 않도록 보호한다.
3. 사용자 신뢰 및 피싱 방지
🚫 문제점 (HTTP 사용 시)
- HTTP 사이트는 브라우저에서 "보안되지 않음(Not Secure)" 경고가 표시된다.
- 사용자는 이런 사이트에서 로그인, 결제 등의 작업을 꺼리게 된다.
- 또한, HTTP를 사용하는 웹사이트는 피싱 사이트로 악용될 가능성이 높다.
✅ HTTPS 사용 시
- 웹사이트가 신뢰할 수 있는 기관(CA)에서 발급한 SSL/TLS 인증서를 사용해야 한다.
- 브라우저에 자물쇠 아이콘이 표시되며, 사용자는 안심하고 웹사이트를 이용할 수 있다.
- 피싱 사이트는 보통 정식 SSL 인증서를 받지 못하기 때문에, HTTPS를 사용하면 피싱 위험을 줄일 수 있따.
📌 즉, HTTPS는 사용자의 신뢰를 높이고 피싱 사이트를 식별하는 데 도움을 준다.
'개발새발 > 네트워크' 카테고리의 다른 글
[네트워크] HTTP의 진화 2. HTTP/2.0 (1) | 2024.07.17 |
---|---|
[네트워크] HTTP의 진화 1. HTTP/0.9~HTTP/1.1 (0) | 2024.07.07 |
[네트워크] TCP/UDP (0) | 2021.09.30 |