1. SSL/TLS
1.1. 정의 :
암호화 기반의 통신 프로토콜이다. TLS는 SSL의 취약점을 보완한 프로토콜이다.
1.2. 특징 :
- SSL 인증서를 통해 클라이언트와 서버 간의 통신을 보증한다.
- 공개키 방식, 비밀 키 암호화 방식을 통해 데이터를 주고 받는다.
- SSL 통신 과정은 handshake라는 과정을 거친다.
1.3. 목적 :
- 모든 주요 운영체제가 SSL/TLS 프로토콜을 지원하며, 비단 전자상거래만을 위한 것이 아닌, 웹사이트에서 주고 받는 모든 유형의 정보를 보호한다.
- CA(Certificate Authority, 인증기관)로 부터 SSL 인증서를 발급받아 데이터 통신의 보안성 보장이 목적이다.
1.4. CA
CA(Certificate Authority)는 인증서를 발급하고 관리하는 기관이다. SSL 인증서는 CA를 통해 발급되며, 웹이나 서버의 신원을 확인하고 보안된 통신을 제공하는데에 사용된다.
1.4.1. SSL 인증서
웹 또는 서버의 공개키와 도메인 이름, 회사 정보 등이 포함되어 있으며, 해당 내용의 정보 보안 및 신뢰성 보장을 위해 CA는 디지털 서명을 SSL 인증서에 포함시킨다.
1.5. 공개키와 비공개키
- SSL/TLS에서의 공개 키 비공개 키는 서버 또는 클라이언트의 신원을 확인하고, 세션 키 교환을 안전하게 수행하기 위해 사용된다.
- 클라이언트는 공개키를 사용하여 세션 키를 암호화하여 서버로 보내며, 서버는 개인 키를 사용하여 해당 세션 키를 복호화(decryption)하여 사용한다.
- → 위 과정으로 세션 키를 안전하게 공유하면, 이 후의 통신은 대칭 키(Symmetric Encryption) 암호화로 수행되며, 세션 키는 효율적으로 암호화 및 복호화되어 데이터의 기밀성과 무결성을 보장한다.
2. HandShake 과정 분석
필자의 PC와 Naver가 Handshake하는 과정을 Wireshark를 활용한 예시이다.
- Client Hello (클라이언트 → 서버) : TLS/SSL 버전, Random data, 세션 ID, Cipher Suite(암호화 알고리즘 집합) 등의 내용을 서버에 전달.
- Server Hello (서버 -> 클라이언트)
: ClientHello 메세지를 받은 후, 암호화 알고리즘 선택.Certificate (서버 -> 클라이언트) : 인증서 전달. 인증서에는 서버가 발행한 공개키가 포함되어 있으며, 공개키로 복호화(decryption)에 성공하면 해당 인증서에 대한 인증이 증명됨.
- Server key Exchange, Server Hello Done (서버 -> 클라이언트)
: 서버의 공개키가 SSL 인증서 내부에 없을 경우 서버가 직접 전달한다는 뜻(있을 경우 server key exchange는 생략). Client가 CA의 공개키를 통해 인증서를 복호화하여 공개키 확보. → 행동 마침.Client Key Exchange (클라이언트 -> 서버)
- Client Key Exchange ( 클라이언트 -> 서버)
: 데이터 암호화에 사용할 대칭 키를 생성하여 SSL 인증서 내부에서 추출한 서버의 공개 키를 이용해 암호화한 후 서버에 전달. 이 키를 사용하여 향후 통신을 암호,복호화 함.Change Cipher Spec(클라이언트 ↔ 서버) / finished: 교환할 정보를 모두 교환한 뒤 통신할 준비가 다 됨을 알림.
아래의 그림은 HTTPS의 Handshake 과정입니다. HTTPS는 HTTP가 SSL 인증서로 보호되고 있는 확장된 프로토콜입니다.
제 글을 다 읽으신 후
위 과정을 이해하신 후 직접 Wiresharke를 활용하여 Handshake 과정을 지켜보고 분석해보는 것을 추천드린다.