"HTTPS는 HTTP에 보안 붙인 것"이라는 한 줄은 맞지만, 무엇이 어떻게 안전해지는지 모르면 면접이나 트러블슈팅에서 막힙니다. 차이는 끝의 S 하나, 즉 TLS로 암호화하느냐에서 전부 갈립니다.
핵심 차이: 평문 vs 암호화
HTTP는 데이터를 평문으로 보냅니다. 중간에서 패킷을 가로채면 로그인 비밀번호까지 그대로 읽힙니다. HTTPS는 그 위에 TLS 계층을 끼워 주고받는 내용을 암호화합니다. 가로채도 암호문이라 의미를 알 수 없습니다.
| 구분 | HTTP | HTTPS |
|---|---|---|
| 암호화 | 없음 (평문) | TLS로 암호화 |
| 기본 포트 | 80 | 443 |
| 서버 인증 | 없음 | 인증서로 신원 확인 |
| 도청·변조 | 취약 | 방어됨 |
| 속도 | handshake 없음 | TLS handshake 약간 추가 |
HTTPS가 보장하는 건 세 가지입니다. 기밀성(내용 도청 방지), 무결성(중간 변조 방지), 인증(접속한 서버가 진짜 그 서버임).
TLS handshake가 하는 일
브라우저가 HTTPS로 접속하면 본문을 주고받기 전에 짧은 협상을 합니다.
- 서버가 인증서(공개키 포함)를 제시한다.
- 브라우저가 인증서를 신뢰된 CA가 서명했는지 검증한다.
- 양쪽이 이번 세션에만 쓸 대칭키를 안전하게 합의한다.
- 이후 실제 데이터는 그 대칭키로 암호화해 주고받는다.
자물쇠 아이콘은 이 검증이 통과했다는 표시일 뿐, "이 사이트는 착하다"는 뜻이 아닙니다. 연결이 암호화됐고 서버 신원이 확인됐다는 의미입니다.
curl -v https://example.com # TLS handshake·인증서 정보 출력
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* subject: CN=example.com
* issuer: C=US; O=DigiCert Inc; CN=...
TLSv1.3로 연결됐고, 인증서 subject가 접속한 도메인과 일치하는지가 핵심입니다. 인증서 만료나 도메인 불일치면 브라우저가 경고를 띄웁니다.
왜 지금은 사실상 필수인가
과거엔 로그인 페이지만 HTTPS를 썼지만, 지금은 전 구간 HTTPS가 표준입니다. 브라우저는 HTTP 사이트에 "주의 요함"을 표시하고, HTTP/2·HTTP/3 같은 최신 프로토콜은 사실상 HTTPS를 전제로 동작합니다. 인증서도 Let's Encrypt로 무료 발급이 가능해 도입 장벽이 사라졌습니다.
요점 정리
- 차이의 본질은 TLS 암호화 여부 — 포트도 80 vs 443으로 갈린다.
- HTTPS는 기밀성·무결성·서버 인증 세 가지를 보장한다.
- TLS handshake에서 인증서 검증 후 세션용 대칭키를 합의한다.
- 자물쇠는 "안전한 사이트"가 아니라 "암호화·신원 확인됨"의 표시다.
TLS handshake와 인증서를 curl·패킷으로 직접 들여다보는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.