Waylog Blog

HTTPS와 SSL/TLS 핸드셰이크: 웹 보안의 보이지 않는 악수

Network

주소창 옆의 자물쇠 아이콘, 이제는 너무나 당연한 HTTPS. HTTPS는 HTTP에 보안 계층인 SSL/TLS를 얹은 것입니다. 내가 보낸 비밀번호가 해커에게 평문으로 노출되지 않도록 데이터를 암호화합니다. 그런데, 처음 접속할 때 클라이언트와 서버는 암호화 키를 어떻게 안전하게 교환할까요? 이 마법 같은 과정을 SSL Handshake라고 합니다.

1. 대칭키 vs 공개키

  • 대칭키: 암호화와 복호화에 같은 키를 씁니다. 빠르지만, 키를 상대방에게 전송하는 과정에서 탈취당하면 끝장입니다.
  • 공개키(비대칭키): 공개키로 잠그면 개인키로만 열 수 있습니다. 안전하지만 계산 비용이 비싸서 느립니다. HTTPS는 이 둘을 혼합해서 씁니다. **"대칭키를 공유하기 위해 공개키 방식을 쓴다"**가 핵심입니다.

2. 핸드셰이크 과정 (간략 버전)

  1. Client Hello: 클라이언트가 서버에게 "안녕? 난 이런 암호화 방식(Cipher Suite)을 지원해"라고 보냅니다.
  2. Server Hello: 서버가 그중 하나를 고르고, 자신의 신분증인 **인증서(Certificate)**와 공개키를 보냅니다.
  3. 인증서 검증: 클라이언트는 브라우저에 내장된 신뢰할 수 있는 기관(CA) 리스트를 통해 이 인증서가 진짜인지 확인합니다.
  4. Pre-Master Secret: 클라이언트가 임의의 난수를 생성한 뒤, 서버의 공개키로 암호화해서 보냅니다. 이제 이 난수는 서버의 개인키로만 열 수 있습니다(해커는 못 엽니다).
  5. 세션 키 생성: 클라이언트와 서버는 서로 교환한 난수들을 조합하여, 통신에 사용할 **대칭키(세션 키)**를 만듭니다.
  6. 암호화 통신 시작: 이제부터 이 대칭키로 데이터를 팍팍 암호화해서 주고받습니다. (빠름!)

이 모든 과정이 우리가 사이트에 접속하는 찰나의 순간에 일어납니다. HTTPS는 선택이 아니라 필수입니다. SEO 점수는 물론이고, 사용자의 신뢰를 얻기 위한 기본 자격입니다.