베지밀
https SSL/TLS 패킷 복호화하기 (w/Wireshark) 본문
🧩 TLS 통신 과정
https는 http에 TLS 암호화를 더하여 애플리케이션 데이터를 안전하게 전송하기 위해 고안된 프로토콜이다.
다음과 같이 3-way Handshake 이후 키를 협상하고, 키 협상 이후의 패킷은 대칭키로 암호화되어 통신한다.
- Client는 Server의 인증서를 받아 Root CA를 통해 검증한다.
- Server 인증이 완료되면 클라이언트는 대칭키 생성을 위한 키 교환을 수행한다.
- 이후부터 https 패킷은 해당 대칭키로 암호화되어 통신한다.
🧩 어떻게 복호화할까?
TLS 통신은 대칭키 암호화를 사용하기 때문에 해당 키만 확보하면 Wireshark에서 복호화가 가능하다.
TLS 핸드셰이크 중 생성되는 세션키인 Pre-Master Secret을 로그파일로 로깅하고, 이 키를 참조하여 wireshark에서 세션을 복호화할 수 있다.
🧩 복호화하기
테스트 환경은 다음과 같다.
- Windows 11
- Chrome
- Wireshark
1️⃣환경변수 설정
시스템 환경 변수 편집 > 환경 변수 > 시스템 변수 > 새로 만들기
변수 이름 : SSLKEYLOGFILE
변수 값 : C:\Users\<사용자명>\Desktop\sslkey.log
2️⃣Wireshark 설정
Wireshark > 편집(edit) > 설정(Preferences) > Protocol > TLS 선택
(Pre)-Master-Secret log filename을 위헤서 설정한 변수 경로로 설정
3️⃣브라우저로 https 페이지 접속
모든 브라우저 및 Wireshark를 종료 후 재시작한다.
해당 위치에 sslkey라는 로그파일이 생성되었다.
4️⃣TLS 복호화 확인
client hello 이후 핸드셰이킹을 수행하고, 키 교환이 끝난 후부터 http로 복호화된 통신 과정을 확인할 수 있다.