HTTP와 HTTPS의 차이점
| 특징 | HTTP | HTTPS |
|---|---|---|
| 이름 | Hypertext Transfer Protocol | Hypertext Transfer Protocol Secure |
| 데이터 암호화 | 암호화되지 않음 (평문) | SSL/TLS로 암호화됨 |
| 보안성 | 가로채기 취약 | 데이터가 가로채기에서 안전함 |
| 인증 | 별도의 인증 없음 | 서버의 신원 인증을 함 |
| 기본 포트 | 80 | 443 |
| URL 형식 | http:// | https:// |
- HTTP는 데이터를 암호화하지 않고 평문으로 전송하므로, 공격자가 정보를 탈취하거나 읽을 수 있습니다.
- HTTPS는 SSL 혹은 TLS 암호화 프로토콜을 이용해 브라우저와 서버 사이 모든 통신을 암호화합니다. 그래서 데이터가 중간에서 노출되거나 조작당하는 것을 막을 수 있습니다.
HTTPS 암호화 과정(기술적인 상세 설명)
HTTPS는 비대칭키(공개키/개인키) 방식과 대칭키(공유키) 방식 모두를 사용합니다. 이 과정은 SSL/TLS 프로토콜을 통해 이루어지며, 데이터 암호화뿐만 아니라 신원 인증, 무결성 보장까지 수행합니다.
단계별 HTTPS 접속/암호화 동작 흐름
-
클라이언트 Hello
- 브라우저(클라이언트)가 서버에 HTTPS로 연결을 요청합니다.
-
서버 인증서 전송
- 서버는 SSL/TLS 인증서를 보냅니다. 이 인증서에는:
- 서버의 신원 정보
- 서버의 공개키
- 공인된 인증기관(CA)의 디지털 서명이 포함되어 있습니다.
- 서버는 SSL/TLS 인증서를 보냅니다. 이 인증서에는:
-
인증서 검증
- 브라우저는 이 인증서가 신뢰할 만한 기관(CA)에서 왔는지, 만료되지 않았는지 등을 체크해 신뢰성을 확인합니다.
-
키 교환(핸드셰이크)
- 인증서가 유효하다면, 브라우저는 랜덤한 세션 대칭키(symmetric session key)를 생성합니다.
- 이 세션키를 서버의 공개키로 암호화하여 서버에 전송합니다.
- 오직 서버만이 자신의 개인키로 이 세션키를 복호화할 수 있습니다.
-
대칭키 세션 암호화
- 이후의 모든 데이터 전송은 새로 교환한 대칭 세션키(예: AES)로 빠르고 효율적으로 암호화되어 전송됩니다.
- 대칭키 암호화는 비대칭키 방식보다 빠르기 때문에 실제 데이터 교환에 사용합니다.
-
데이터 보호
- 이 세션 동안의 모든 HTTP 요청/응답 데이터가 암호화되어 이동합니다.
- 중간에서 누군가 데이터 패킷을 탈취하더라도, 세션키 없이는 해독할 수 없습니다.
-
무결성/인증 제공
- HTTPS는 데이터가 변조되지 않았음을 보장(무결성)하고, 접속한 서버가 진짜임을 인증합니다.
암호화 플로우 요약
- 비대칭키(공개키/개인키): 대칭키를 안전하게 주고받기 위한 용도
- 대칭키(세션키): 실제 데이터 전송에 사용(속도와 효율성 때문)
암호화 과정 도식화
| 단계 | 암호화 방식 | 목적 |
|---|---|---|
| 서버가 인증서 전송 | 공개키(RSA 등) | 서버 인증, 키 교환 시작 |
| 클라이언트가 세션키 전송 | 공개키로 암호화 | 대칭 세션키를 안전하게 전달 |
| 데이터 교환 | 대칭키(AES 등) | 실제 데이터 암호화 |
왜 HTTPS가 중요한가?
- 프라이버시: 사용자의 모든 데이터가 암호화되어 전송, 도·감청 방지
- 무결성: 데이터가 중간에 변조되지 않았음을 보증
- 인증: 서버의 신원을 확인, 중간자 공격(MITM) 방지
요약하자면:
HTTP는 평문 통신 방식이며, HTTPS는 HTTP 위에 강력한 암호화와 인증 절차를 더해 모든 사용자·서버간 데이터를 안전하게 보호합니다.
HTTPS 핸드셰이크 설명
HTTPS 핸드셰이크(SSL/TLS 핸드셰이크)는 브라우저와 웹 서버가 안전하고 암호화된 연결을 만드는 과정입니다. 단계별 과정을 설명합니다.
1. 개요
목적:
- 암호화 방식(암호 알고리즘, Cipher Suite) 협상
- 서버의 신원(정상 서버 여부) 인증
- 빠른 데이터 암호화를 위한 대칭 세션 키 생성
2. 단계별 HTTPS 핸드셰이크 진행 과정
| 단계 | 설명 |
|---|---|
| Client Hello | 클라이언트가 지원하는 TLS 버전, 암호화 방식, 랜덤값(Client Random)을 서버에 보냄 |
| Server Hello | 서버가 결정한 버전/암호화 방식, 자신의 랜덤값(Server Random), 그리고 서버 인증서를 클라이언트에 반환 |
| 인증서 검증 | 클라이언트가 서버의 인증서를 신뢰할 수 있는지 검증(공인 CA 확인 등) |
| 키 교환 | 클라이언트가 pre-master secret(임시 키)을 생성, 서버의 공개키로 암호화해 서버로 전송 |
| 세션키 생성 | 양쪽이 교환한 random 값들과 pre-master secret을 조합해 동일한 대칭 세션키를 생성 |
| 암호화된 통신 시작 | 이후 데이터는 모두 이 대칭 세션키로 빠르게 암호화해 주고받음 |
3. HTTPS 핸드셰이크 과정 설명
-
1. Client Hello
브라우저가 지원하는 암호화 방식과 랜덤값을 서버에 보냅니다. -
2. Server Hello & 인증서
서버가 호환 가능한 방식을 선택해서 알리고, 본인의 인증서(서버 공개키 포함)와 랜덤값을 보냅니다. -
3. 인증서 검증
브라우저는 인증서가 신뢰할 수 있는 CA에서 발급받은 진짜 서버인지 검증합니다. -
4. Pre-Master Secret 전송
클라이언트가 pre-master secret(임시 키/난수)을 생성해, 서버 공개키로 암호화해서 서버로 보냅니다. -
5. 세션키 생성
서버와 클라이언트 모두 이 과정에서 얻은 값(랜덤값+pre-master secret)으로, 동일한 대칭 세션키를 만듭니다. -
6. 암호화 통신
이제부터는 세션키로 모든 데이터가 암호화되어 송수신됩니다. 중간에서 누군가 통신을 가로채도 복호화 불가입니다.
4. 보안의 원리
- 비대칭 암호화로 session key(대칭키)를 안전하게 교환함
- 대칭키 암호화(AES 등)는 이후 빠르고 안전하게 데이터 보호
- 인증서 검증으로 중간자 공격(MITM) 방지
- 무결성 체크로 데이터 변조 감지