요즘 웹사이트를 만들 때 HTTPS를 빼놓을 수 없죠. 그냥 HTTP에 ‘S’가 하나 더 붙었을 뿐인데 뭐가 그렇게 중요한 걸까요? 사실 이 ‘S’ 하나가 우리 데이터를 얼마나 안전하게 보호하는지 알면 깜짝 놀랄 거예요.
HTTPS는 기본 HTTP에 ‘암호화’가 더해진 버전입니다. 웹 브라우저와 서버 간의 모든 통신이 암호화되어 제3자가 데이터를 훔쳐보지 못하게 해줍니다. 이 글에서는 HTTPS가 어떻게 동작하는지, 왜 중요한지, 그리고 어떻게 적용하는지 알려드릴게요.
HTTP와 HTTPS의 차이점
HTTP 요청의 생애 주기
1. 클라이언트가 요청을 보냄:
- 브라우저가 HTTP 요청을 생성합니다.
- GET, POST 등의 메서드를 사용하고, 요청된 리소스를 명시합니다.
2. DNS 조회:
- 도메인 이름을 IP 주소로 변환합니다.
- 브라우저가 DNS 서버에 쿼리를 보내 도메인 이름을 IP 주소로 변환합니다.
3. TCP 핸드셰이크:
- 클라이언트가 서버와 TCP 연결을 설정합니다.
- SYN, SYN-ACK, ACK의 3단계 핸드셰이크 과정을 거칩니다.
4. HTTP 요청 전송:
- TCP 연결이 설정되면 클라이언트가 HTTP 요청을 보냅니다.
5. 패킷 라우팅:
- 데이터 패킷이 여러 네트워크 장치를 통해 서버로 전달됩니다.
- 라우터가 패킷의 최적 경로를 결정합니다.
6. 서버 응답:
- 서버가 HTTP 요청을 처리하고 응답을 생성합니다.
- 응답 본문에 HTML 페이지나 JSON 데이터를 포함합니다.
7. 콘텐츠 렌더링:
- 브라우저가 HTTP 응답을 받아 화면에 콘텐츠를 렌더링합니다.
- 추가 리소스(이미지, CSS, JavaScript 등)를 요청합니다.
HTTPS: HTTP + 암호화
TLS 핸드셰이크
TLS는 HTTPS의 핵심으로, 클라이언트와 서버가 암호화 키를 교환하여 보안된 통신을 할 수 있게 합니다.
1. TLS 1.3 핸드셰이크:
- 클라이언트가 지원하는 암호화 스위트와 TLS 버전을 서버에 보냅니다.
- 서버가 선택한 암호화 스위트와 TLS 버전을 클라이언트에 보냅니다.
- 클라이언트가 서버의 SSL 인증서를 검증합니다.
- 클라이언트가 프리마스터 시크릿을 생성하여 서버에 보냅니다.
- 클라이언트와 서버가 세션 키를 생성합니다.
- 세션 키를 사용하여 보안된 통신을 합니다.
HTTPS의 실무 적용
HTTPS를 제대로 적용하면 우리의 웹사이트가 해킹에 강해지고, 사용자들의 개인정보가 보호됩니다. 더 간단하고 빠르며 안전한 TLS 1.3을 사용하는 것이 좋습니다. 프로젝트에 HTTPS를 적용하여 보안성을 강화하세요.
참고 자료: devonperoutky, “Mediocre Engineer’s guide to HTTPS”